WPF MVVM无法通过单击按钮来获取要更新的UI


我有一个简单的窗口,里面有一个文本框和一个按钮。文本框绑定到名为"Message"的ViewModel属性,按钮绑定到使用标准"RelayCommand"的命令"ClickCommand"。其想法是单击该按钮将更新TextBox中的文本。

以下是绑定:

<Button x:Name="button"  Command="{Binding ClickCommand}" Content="Button" HorizontalAlignment="Left" Margin="50,245,0,0" VerticalAlignment="Top" Width="75"/>
<TextBox x:Name="textBox" Text="{Binding Message, Mode=OneWay}" HorizontalAlignment="Left" Height="23" Margin="50,95,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="650"/>

这是ViewModel:

public class ProgressViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public RelayCommand ClickCommand { get; set; }
private ProgressModel progress;
public ProgressModel Progress
{
get { return progress; }
set { progress = value; OnPropertyChanged(); }
}
public ProgressViewModel()
{
progress = new ProgressModel { Message = "START" };
ClickCommand = new RelayCommand((p) => UpdateMessage());
}
private void UpdateMessage()
{
// Gets to here OK ...
Message = System.DateTime.Now.ToString(); 
}
public string Message
{
get
{
return progress.Message;
}
set
{
if (progress.Message != value)
{
OnPropertyChanged();
}
}
}
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}

单击该按钮将成功地到达UpdateMessage((,但是Message属性没有更改。即使我在那里放了一个断点并跨过它,"Message"值也会保持在"START",这就是它在构造函数中初始化时使用的值。setter代码未运行,OnPropertyChanged((未激发,因此视图不会更新。

我做错了什么?

您没有设置Message的新值。

public string Message
{
get
{
return progress.Message;
}
set
{
if (progress.Message != value)
{
progress.Message = value;
OnPropertyChanged();
}
}
}

最新更新