0

これは単純な画面で、textblock最初は ""buttonで、テキストを に設定する "テキストの設定" と、 のテキストを常にクリアする "テキストのクリア"textblockと呼ばれます。これは、XAML がどのように見えるかです。another buttontextblock

<StackPanel>
    <TextBlock Text="{Binding DisplayText, Mode=TwoWay}"></TextBlock>
    <Button Content="Set Text" Command="{Binding SetTextCommand}"></Button>
    <Button Content="Clear Text" Command="{Binding CancelCommand}" 
                                 IsEnabled="{Binding CanCancel, Mode=TwoWay}"/>
</StackPanel>

これが私のViewModelコードです。

public class Page1VM : ViewModelBase
    {

        public RelayCommand SetTextCommand { get; private set; }
        public RelayCommand CancelCommand { get; private set; }

        public Page1VM()
        {
            SetTextCommand = new RelayCommand(HandleSetText, CanExecute);
            CancelCommand = new RelayCommand(HandleClearButtonClick, CanExecuteCancel);
        }

        private void HandleSetText(string number)
        {
            DisplayText = number;
        }

        private string _displayText="";
        public string DisplayText
        {
            get { return _displayText; }
            set
            {
                _displayText = value;
                RaisePropertyChanged("DisplayText");
                RaisePropertyChanged("CanCancel");
            }
        }

        private bool _canCancel;
        public bool CanCancel
        {
            get
            {
                if (DisplayText == "")
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            set
            {
                _canCancel = value;
                RaisePropertyChanged("CanCancel");
            }
        }

        private bool CanExecute()
        {
            return true;
        }
        private bool CanExecuteCancel()
        {
            if (DisplayText == "")
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        private void HandleClearButtonClick()
        {
            DisplayText = "";
        }
        private void HandleSetText()
        {
            DisplayText = "Hello";
        }
    }

問題: ページが読み込まれると、[テキストをクリア] ボタンが無効になり、意図したとおりに正常に動作します。

「テキストの設定」をクリックすると、名前付きのプロパティにテキスト値を設定してテキストブロックにテキストを設定し、DisplayText呼び出し RaisePropertyChanged("CanCancel");ても、「テキストのクリア」ボタンが有効になりません。その背後にある理由は何ですか?私のテキストブロックにはテキスト値が表示されますが、「クリアテキスト」ボタンはまだ有効になっていません。

4

1 に答える 1