2009-04-28 4 views
1

Это, вероятно, основной вопрос, так как я новичок в WPF ..поле Update, когда свойство изменяется

У меня есть UserControl, который содержит TextBox и Button (код упрощен для этого вопроса):

<UserControl x:Name="this"> 
    <TextBox Text="{Binding ElementName=this, Path=MyProperty.Value}"/> 
    <Button x:Name="MyButton" Click="Button_Click"/> 
</UserControl> 

В коде позади меня зарегистрировали "MyProperty", как DependencyProperty:

public static readonly DependencyProperty MyPropertyProperty = DependencyProperty.Register("MyProperty", typeof(MyProperty), typeof(MyPropertyNumeric), new UIPropertyMetadata(null)); 

а "MyProperty" это класс, определенный мною, который реализует INotifyPropertyChanged. «MyProperty.Value» - это объект типа.

Когда кнопка нажата, я изменяю MyProperty.Value в коде. Я хочу, чтобы TextBox автоматически показывал новое значение. Я бы ожидал, что это будет работать, поскольку я реализовал INotifyPropertyChanged, но это не так. Кто-нибудь знает, как это сделать?

ответ

1

Вы вызываете событие OnPropertyChanged с именем вашего свойства, когда оно обновляется?

Например,

public class MyProperty : INotifyPropertyChanged { 
    private string _value; 

    public string Value { get { return _value; } set { _value = value; OnPropertyChanged("Value"); } } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string name) { 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if(handler != null) { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
    } 
} 

Важно убедиться, что событие PropertyChanged вызывается с именем свойства, которое необходимо обновить.

+0

Спасибо! Я присвоил имя свойства (которое не имеет смысла для WPF) вместо «Значение» –

0

попробуйте добавить к Binding Mode = "OneWay", я не уверен, Что самый Defualt

+0

Не работает, кроме того, я хочу, чтобы моя привязка работала в обоих направлениях. –

Смежные вопросы