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

アプリケーションを実行すると、「まだ完了していません」というメッセージが表示されます。が表示されますが、コマンドが実行された後、テキスト ブロックのテキストは "Done!" に更新されません。

それを機能させる方法は?

4

1 に答える 1

1

ビューに通知する場合は、プロパティ セッターnotifypropertychangedで行う必要があります。また、私の知る限り、それは読み取り専用であるため、あなた に置く意味はありません。テキストが変更されたときに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 に答える