1

私の質問を画像で説明させてくださいここに画像の説明を入力してください

プロジェクトにMVVM構造があります。2つのテキストブロックがTextblock 1ありtextblock 2ます。ここで、Textblock1のテキストが変更されたときはいつでも、textblock2'sテキストと同じテキストが必要です。ただし、テキストをとは異なるTextblock1's設定にできるはずです。そこで、Textblock1のTextプロパティのOnewayバインディングを設定しています。Textblock2'sTextblock1's

InMVVMのTextプロパティを取得するにはどうすればよいですかTextblock2's。Textプロパティのプロパティを作成すると、テキストをTextblock2'sにバインドできなくなります。Textblock1'stextblock2

さらに質問をクリアしたい場合はお知らせください。

期待してくれてありがとう。

4

2 に答える 2

3

VM で 2 つのプロパティを使用し、そこに equal/override ロジックを実装します。それはまさに、VM が得意とする種類のものです。

VM 
  Prop1 <-- Binding- TextBlock1
  Prop2 <-- Binding- TextBlock2

Prop1 セッターは、Prop2 も更新するように実装されています (INotifyPropertyChanged を忘れないでください)。Prop2 を設定すると、切り替えて別の値を保持します。

于 2013-02-08T06:21:52.287 に答える
2

flqの答えに沿ったコードは次のとおりです。

public class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private string _text1;
    private string _text2;

    public string Text1
    {
        get { return _text1; }
        set
        {
            if (_text1 != value)
            {
                _text1 = value;                    

                RaisePropertyChanged("Text1");

                Text2 = _text1;
            }
        }
    }        

    public string Text2
    {
        get { return _text2; }
        set
        {
            if (_text2 != value)
            {
                _text2 = value;

                RaisePropertyChanged("Text2");
            }
        }
    }

    public MyViewModel()
    {

    }

    private void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }        
}

必ずバインディングを双方向に変更してください。

編集:

XAML は次のとおりです。

<TextBox Text="{Binding Text1, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding Text2}" />

UpdateSourceTrigger=PropertyChanged を設定すると、入力時にプロパティを更新できるため、TextBox2 は入力時に更新されます。(FYI - TextBoxes の既定のバインドは双方向です)

于 2013-02-08T12:20:13.237 に答える