我有使用MVVM的Wpf应用程序,代码如下所示:
XAML:
<StackPanel Orientation="Vertical">
<TextBox Text="{Binding DataFolder}" TextWrapping="Wrap"/>
<Button Content="Convert" Padding="8" Command="{Binding ConvertCommand}" IsEnabled="True" MinWidth="220"/>
<TextBlock Text="{Binding DoneMessage, UpdateSourceTrigger=PropertyChanged}"></TextBlock>
</StackPanel>ViewModel:
public class ConverterViewModel : NotificationObject
{
public string DataFolder { get; set; }
public string DoneMessage { get; set; }
public DelegateCommand ConvertCommand { get; set; }
private readonly List<BaseConverter> _converters = new List<BaseConverter>
{
new VisualCheckEventConverter()
};
public ConverterViewModel()
{
ConvertCommand = new DelegateCommand(VisualCheckEventConvertCommandExecute);
DataFolder = ConfigurationManager.AppSettings["InputFolder"];
DoneMessage = "Not done yet.";
}
private void VisualCheckEventConvertCommandExecute()
{
foreach (var c in _converters)
c.Convert(DataFolder);
DoneMessage = "Done!";
}
}当我运行应用程序时,消息“尚未完成”。显示,但在执行命令后,文本块的文本不会更新为“完成!”。
怎么让它起作用?
发布于 2016-12-08 13:44:13
如果希望通知视图,则需要在notifypropertychanged属性设置器中使用DoneMessage。
另外,AFAIK没有必要将UpdateSourceTrigger=PropertyChanged放在TextBlock上,因为它是只读的。如果您希望在更改文本时通知您的TextBox,则应该将其放在您的ViewModel上。
应该是这样的:
private string _doneMessage;
public string DoneMessage
{
get { return _doneMessage; }
set
{
_doneMessage = value;
//the method name may vary based on the implementation of INotifyPropertyChanged
NotifyPropertyChanged("DoneMessage");
}
}https://stackoverflow.com/questions/41040788
复制相似问题