1

让我用一张图片来解释我的问题在此处输入图像描述

我的项目中有 MVVM 结构。我有两个文本块,Textblock 1textblock 2. 现在,每当 Textblock1 的 Text 更改时,我希望textblock2'sText 与 Text 相同。Textblock1's但我应该能够将Textblock2'sText 设置为不同于Textblock1's. 所以我正在设置 Textblock1 的文本属性的单向绑定。

如何获取Textblock2'sIn MVVM 的 Text 属性。如果我为 Text 属性创建一个属性Textblock2's,我将无法将Textblock1's文本绑定到textblock2.

如果我想进一步澄清我的问题,请告诉我。

感谢期待。

4

2 回答 2

3

在 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 将在您键入时更新。(仅供参考 - TextBoxes 的默认绑定是双向的)

于 2013-02-08T12:20:13.237 回答