0

我有使用 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>

视图模型:

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!";
    }
}

当我运行应用程序时,消息“尚未完成”。显示,但在执行命令后,文本块的文本不会更新为“完成!”。

如何让它发挥作用?

4

1 回答 1

1

如果您希望通知视图,则需要notifypropertychanged在属性设置器中。 此外,AFAIK 没有任何意义,因为它是只读的。如果您希望在文本更改时通知您的 ViewModel,您应该将它放在您的位置。 应该是这样的:DoneMessage
UpdateSourceTrigger=PropertyChangedTextBlockTextBox

    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");
        }
    }
于 2016-12-08T13:44:13.727 回答