0

ユーザーがテキストボックスに正しい数字を入力したかどうかに基づいて、テキストブロック内のテキストを変更するコマンドで送信ボタンを作成しました。

    public string txtResults { get; set; }
    public string txtInput { get; set; }

        // Method to execute when submit command is processed
    public void submit() 
    {
        if (txtInput == number.ToString())
            txtResults = "Correct!";
        else
            txtResults = "Wrong!";
    }

'txtInput' は、テキスト ボックスにバインドされ、ユーザーの入力を含むメンバーです。「txtResults」はテキストブロックに表示されるはずです。今、送信ボタンをクリックすると、デバッグ モードで、txtResults の値に "Correct!" が割り当てられます。文字列ですが、ビューでは更新されません。

XAML:

<Window x:Class="WpfMVVP.WindowView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfMVVP"
    Title="Window View" Height="350" Width="525" Background="White">
<Grid>
    <Canvas>
        <Label Canvas.Left="153" Canvas.Top="89" Content="Guess a number between 1 and 5" Height="28" Name="label1" />
        <TextBox   Text="{Binding txtInput, UpdateSourceTrigger=PropertyChanged}" Canvas.Left="168" Canvas.Top="142" Height="23" Name="textBox1" Width="38" />
        <TextBlock Text="{Binding txtResults}" Canvas.Left="257" Canvas.Top="142" Height="23" Name="textBlock1" />
        <Button Command="{Binding Submit}" Canvas.Left="209" Canvas.Top="197" Content="Submit" Height="23" Name="button1" Width="75" />
    </Canvas>
</Grid>

アップデート:

ビューモデルでこの変更を行いました

public class WindowViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }


    private string _txtResults;
    public string txtResults
    {
        get { return _txtResults; }
        set { _txtResults = value; OnPropertyChanged("txtResults"); }
    }

そして今、それは働いています!ありがとう。

4

1 に答える 1

2

txtResults プロパティが INotifyPropertyChanged から継承されていることを確認してください。ビューモデルもそこから継承する必要があります。ビュー モデル クラスに INotifyPropertyChanged を継承させ、インターフェイスを実装します。次に、TxtResults プロパティを次のように置き換えます。

    private string _txtResults = string.Empty;
    public string TxtResults
    {
        get { return this._txtResults; }

       set
       {
            this._txtResults= value;
             this.RaisePropertyChangedEvent("TxtResults");
        }
    }
于 2013-04-18T20:48:29.453 に答える