Простая проблема с OneWay Binding в WPF - PullRequest
1 голос
/ 31 октября 2010

У меня есть простой класс с одним свойством, этот класс реализует интерфейс INotifyPropertyChange.

    public class SomeClass : INotifyPropertyChanged
    {
        private string _iD;

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }

        public string ID
        {
            get { return _iD; }
            set
            {
                if (String.IsNullOrEmpty(value))
                    throw new ArgumentNullException("ID can not be null or empty");

                if (this.ID != value)
                {
                    _iD = value;
                    NotifyPropertyChanged(ID);
                }
            }
        }
    }

Я пытаюсь сделать привязку OneWay к метке.Я установил метку DataContext в коде позади.

    private SomeClass _myObject;

    public MainWindow()
    {
        InitializeComponent();
        _myObject = new SomeClass() { ID = "SomeID" };
        lb.DataContext = _myObject;
    }

В XAML я связываю свойство ID с Content метки.

    <Label Name="lb" Content="{Binding Path = ID, Mode=OneWay}" Grid.Row="0"></Label>
    <TextBox Name="tb" Grid.Row="1"></TextBox>
    <Button Name="btn" Content="Change" Height="20" Width="100" Grid.Row="2" Click="btn_Click"></Button>

Затем я изменяю значение свойства ID в событии нажатия кнопки, но содержимое метки не меняется.

    private void btn_Click(object sender, RoutedEventArgs e)
    {
        _myObject.ID = tb.Text;
        Title = _myObject.ID;
    }

Почему это не работает?

1 Ответ

3 голосов
/ 31 октября 2010

NotifyPropertyChanged должен принимать имя измененного свойства, а не значение свойства. Так что измените NotifyPropertyChanged(ID) на NotifyPropertyChanged("ID").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...