1

私のビューモデル

public class MyViewModel : ViewModelBase
        {
            // INotifyPropertyChanged is implemented in ViewModelBase

            private String _propX;
            public String PropX
            {
                get { return _propX; }
                set
                {
                    if (_propX != value)
                    {
                        _propX = value;
                        RaisePropertyChanged(() => PropX);
                    }
                }
            }

            private String _propY;
            public String ServerIP
            {
                get { return _propY; }
                set
                {
                    if (_propY != value)
                    {
                        _propY = value;
                        RaisePropertyChanged(() => ServerIP);
                    }
                }
            }

            public A()
            {
                this._propY = "000.000.000.000";
                this._propY = "000.000.000.000";
            }
        }

// EDIT
// This is the command that resets the properties
    private RelayCommand _resetFormCommand;
    public ICommand ResetConnectionFormCommand
    {
        get
        {
            if (_resetFormCommand == null)
            {
                _resetFormCommand = new RelayCommand(param => this.ExecuteResetFormCommand(), param => this.CanExecuteResetFormCommand);
            }

            return _resetFormCommand;
        }
    }

    private bool CanExecuteResetFormCommand
    {
        get
        {
            return !String.IsNullOrWhiteSpace(this._propX) ||
                !String.IsNullOrWhiteSpace(this._propY);
        }
    }

    private void ExecuteResetFormCommand()
    {
        this._propX = "";
        this._propY = "";
    }

マイ ビュー xaml

<TextBox Name="propX" Text="{Binding PropX }" PreviewTextInput="textBox_PreviewTextInput" />
<TextBox Name="propY" Text="{Binding PropY }" PreviewTextInput="textBox_PreviewTextInput" />
<Border>
    <Button Content="Reset" Name="resetBtn" Command="{Binding ResetFormCommand}" />
</Border>

私のViewコードビハインド

private MyViewModel vm;
public ConnectionUserControl()
{
    InitializeComponent();
    vm = new MyViewModel();
    this.DataContext = vm;
}

private void textBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    ValidateInput(sender as TextBox, e);
}

リセットコマンドはビューモデルのプロパティをリセットしますが、テキストボックスにはまだ値が含まれており、バインディングが正しく機能していません:(ここに何か不足していますか?

4

5 に答える 5

3

プライベートメンバーではなく、プロパティをリセットする必要があります。

private void ExecuteResetFormCommand(){this.PropX = ""; this.PropY = ""; }

于 2013-03-05T13:41:49.307 に答える
0

どのように値をリセットしますか?値をリセットすると、データバインディングが上書きされる可能性があります。ボタンがクリックされたときに実行されるコードを投稿すると便利です。

于 2013-03-05T12:24:57.860 に答える
0

xaml コードでは、次のようにバインディングを設定する必要があります。

<TextBox Name="propX" Text="{Binding PropX, Mode=TwoWay}" .../>
于 2013-03-05T12:26:26.150 に答える
0

テキストボックスがビューモデルから自身を更新するには、バインディングが双方向である必要があります

于 2013-03-05T12:33:55.830 に答える
0

あなたのコード ビハインドには、あなたがプロパティにバインドするので、あなたServerIPが名前を付けたかったと思うプロパティがあります。PropYTextBoxPropY

<TextBox Name="propY" Text="{Binding PropY }" PreviewTextInput="textBox_PreviewTextInput" /

また、プライベート メンバーはトリガーされないため、プライベート メンバーではなく、 ExecuteResetFormCommandコマンドでプロパティに値を割り当てる必要があります。INotifyPropertyChanged

private void ExecuteResetFormCommand()
{
    this.PropX = "";
    this.PropY = ""; // <-- Currently you have PropY declared as ServerIP
}
于 2013-03-05T13:50:25.547 に答える