Я борюсь с этим некоторое время, и я не могу понять это. У меня есть кнопка и текстовое поле. TextBox связан со свойством с именем: MessageDisplay. Я хочу иметь доступ к этому свойству и обновлять textBox в нескольких местах. К сожалению, PropertyChanged является нулевым. Странно то, что если я скопирую / вставлю класс MessageDisplayModel в класс * MessageViewModel *, он будет работать ...
вот мой код: XAMLfile:
<Grid>
<Button Command="{Binding DisplayTextCommand}" Name="DisplayTextCommand" Margin="53,72,544.6,286" Width="Auto">Push</Button>
<TextBox Name="MessageDisplay" Text="{Binding MessageDisplay, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
</Grid>
Файл MessageDisplayModel
public class MessageDisplayModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _message;
public string MessageDisplay
{
get { return _message; }
set
{
this._message = value;
this.OnPropertyChanged("MessageDisplay");
}
}
public void UpdateTextBox(string output)
{
MessageDisplay = output;
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
}//class
Файл MessageViewModel:
public class MessageViewModel
{
private ICommand _testCommand;
public MessageDisplayModel MessageDisplaySmt = new MessageDisplayModel();
public ICommand DisplayTextCommand
{
get
{
return new DelegateCommand(DisplayMessage);
}
set
{
if (_testCommand == value) return;
_testCommand = value;
}
}
public void DisplayMessage()
{
MessageDisplaySmt.UpdateTextBox("Successfuly downloaded");
}
}//class
Файл MainWindow
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MessageDisplay.DataContext = new MessageDisplayModel();
DisplayTextCommand.DataContext = new MessageViewModel();
}
}//class
Я обновляю свойство MessageDisplay с помощью метода UpdateTextBox (строка) , Я вызываю этот метод по нажатию кнопки. При отладке свойство обновляется, но когда приходит время уведомить пользовательский интерфейс об изменении свойства, PropertyChangedEventHandler PropertyChanged имеет значение null ... Но если я что-то напишу в textBox, PropertyChangedEventHandler PropertyChanged изменяется и больше не является нулевым. Все, что я хочу, - это иметь возможность изменять свойство textBox, когда захочу и откуда угодно. Спасибо