2016-04-05 2 views
0

У меня есть эта кнопка, которая имеет двустороннюю привязку на кисти фона, я настроил свойство зависимостей, я также использую интерфейс INotifyPropertyChanged. Но у меня все еще возникают проблемы с двумя способами привязки.wpf control background 2-way binding only working one way

Если я обновляю свойство, привязанное к кнопке, меняется фон на кнопках, как если бы я обновлял фон кнопок непосредственно («button.Background = Brushes.Blue»), свойство не обновляется ,

Вот XAML для кнопки:

<Button Background="{Binding ElementName=MainWindow,Path=TitleBrush,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 

Свойство:

public Brush TitleBrush 
{ 
    get 
    { 
     return (Brush)GetValue(TitleBrushProperty); 
    } 
    set 
    { 
     if (!_graph.TitleBrush.Equals(value)) 
     { 
      _graph.TitleBrush = value; 
      SetValue(TitleBrushProperty, value); 
      NotifyPropertyChanged(nameof(TitleBrush)); 
     } 
    } 
} 

public static readonly DependencyProperty TitleBrushProperty = 
     DependencyProperty.Register(nameof(TitleBrush), typeof(Brush), typeof(MainWindow)); 

два способа изменить цвет фона:

TitleBrush = Brushes.Red; // This works great 
button.Background = Brushes.Red; // This changes the background but doesn't update the property 

Любая помощь приветствуется.

ответ

0

TwoWay предназначен для установки значения в связанное свойство и принятия значения обратно. В вашем случае вы устанавливаете его одним способом для обоих случаев - для элемента управления. Элемент управления не возвращает значение свойства обратно. TwoWay действительно предназначен для полей ввода. Если вы используете код, вы должны использовать свойство bound.

Как BindingMode Enumeration documentation состояний:

Причина изменения либо свойства источника или целевое свойство для автоматического обновления других. Этот тип привязки подходит для редактируемых форм или других полностью интерактивных пользовательских интерфейсов.

+0

Хорошо спасибо, я надеялся, что это не так. Но в любом случае, я думаю, что-то другое. – kevincorrigan

+0

Добро пожаловать. Именно так WPF был разработан для работы. Если вам необходимо установить цвет элемента управления программно, вы можете создать отдельный ViewModel, поместить туда свойства, установить экземпляр как DataContext и работать с ним таким образом. Прямой доступ/обращения к элементам управления должен быть последним средством. –