Связывание данных в пользовательских элементах WPF

Я создаю UserControl для ряда элементов управления, разделяемых несколькими windowsми. Одним из элементов управления является метка, которая показывает stream какого-либо другого процесса с точки зрения «номеров протоколов».

Я пытаюсь предложить DataBinding с этой меткой, чтобы Окно автоматически отражало состояние процесса по мере изменения переменной номера протокола.

Это пользовательский элемент управления XAML:

   

И это Код:

 public partial class MainControls { public MainControls() { InitializeComponent(); } public int ProtocolNumber { get { return (int)GetValue(ProtocolNumberProperty); } set { SetValue(ProtocolNumberProperty, value); } } public static DependencyProperty ProtocolNumberProperty = DependencyProperty.Register("ProtocolNumber", typeof(int), typeof(MainControls)); } 

Кажется, что это работает, потому что если на конструкторе я устанавливаю ProtocolNumber на произвольное значение, оно отражается в пользовательском элементе управления.

Однако при использовании этого пользовательского контроля в конечном окне происходит перерыв в привязке данных.

XAML:

      

Код для windows:

 public partial class Window1 : Window { public Window1() { Number= 15; InitializeComponent(); } public int Number { get; set; } } 

Это устанавливает номер протокола в ноль, игнорируя значение, установленное на Number.

Я читал пример

если вы посмотрите на окно вывода, вы увидите исключение привязки.

У вас есть следующая проблема: в вашем пользовательском управлении вы привяжете метку к DP ProtocolNumber вашего usercontrol, а не к DataContext , поэтому вам нужно добавить, например, имя элемента для привязки.

    (...)  

EDIT: чтобы очистить некоторые вещи, ваш usercontrol также работает, если вы измените привязку в своем MainWindow. но вы должны привязываться к DataContext MainWindow с RelativeSource.

   

Что вы имеете в виду:

  

=> Не устанавливайте DataContext в объявления UserControl , вместо этого ElementName привязки RelativeSource или ElementName .

Если вы не указали RelativeSource привязки, попробуйте установить DataContext в конструкторе:

  public Window1() { Number= 15; DataContext = this; InitializeComponent(); } 
  • KeyBinding в UserControl не работает, когда TextBox имеет фокус
  • WindowsFormsHost всегда самый верхний элемент WPF
  • Связывающие свойства в коде
  • Условный список itemtemplate или datatemplate в WPF
  • Как программно выбрать элемент в WPF TreeView?
  • Как связать команду в WPF с обработчиком события двойного щелчка элемента управления?
  • Является ли атрибут CallerMemberName в 4.5 "способным подделаться"?
  • Windows 10 Universal App File / Directory Access
  • Принудительное рендеринг элемента управления WPF в памяти
  • Bind TextBox при нажатии клавиши Enter
  • MVVM Dynamic Menu UI от привязки с ViewModel
  • Interesting Posts

    Как настроить Mac для маршрутизации внешних IP-запросов на разные интерфейсы?

    Google Cloud Messaging (GCM) с локальными группами устройств на Android дает HTTP-код ошибки 401

    Как сравнить два двойных значения в Java?

    Как диагностировать спонтанную перезагрузку?

    Как печатать форматированные значения BigDecimal?

    Я обновился до Windows 10, и теперь я заблокирован из своего компьютера

    Глубокая нулевая проверка, есть ли лучший способ?

    Как подключиться к папке HTDA WebDAV в Windows 7?

    Как читать многослойные файлы Fireworks PNG без фейерверков

    Есть ли способ дублировать панель задач на нескольких мониторах в Windows 7?

    Что означает «статическое» значение в C?

    jQuery select на основе текста

    Как представить шестнадцатеричное значение, такое как FFFFFFBB в программировании встроенной сборки x86?

    Почему обработка отсортированного массива медленнее, чем несортированный массив?

    Внедрить INotifyPropertyChanged в сгенерированные classы Entity Framework

    Давайте будем гением компьютера.