【发布时间】:2020-04-04 14:30:13
【问题描述】:
我为此苦苦挣扎了一段时间,但我无法弄清楚。我有一个按钮和一个文本框。文本框链接到一个名为:MessageDisplay 的属性。我希望能够访问此属性并在多个位置更新文本框。可悲的是,PropertyChanged 为空。奇怪的是,如果我将 MessageDisplayModel 类复制/粘贴到 *MessageViewModel * 类中,它可以工作......
这是我的代码: XAML 文件:
<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
主窗口文件
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MessageDisplay.DataContext = new MessageDisplayModel();
DisplayTextCommand.DataContext = new MessageViewModel();
}
}//class
我使用 UpdateTextBox(string) 方法更新 MessageDisplay 属性。我在单击按钮时调用此方法。 调试时属性会更新,但是当通知 UI 属性已更改时,PropertyChangedEventHandler PropertyChanged 的值为 null ...但是如果我在文本框,PropertyChangedEventHandler PropertyChanged 被更改并且不再为空。我想要的只是能够随时随地更改文本框的属性。 谢谢你
【问题讨论】:
标签: wpf mvvm data-binding