如何将一个文本块值单向绑定到其他文本块并在MVVM中获取值

时间:2013-02-08 06:16:40

标签: .net wpf xaml mvvm xaml-binding

让我用图片enter image description here

解释我的问题

我的项目中有MVVM结构。 我有两个文本块Textblock 1textblock 2。现在,每当Textblock1的文本发生变化时,我希望textblock2's文本与Textblock1's文本相同。 但我应该可以将Textblock2's文字设置为与Textblock1's不同。 所以我正在设置Textblock1的文本属性的单向绑定。

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

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

感谢您的期待。

2 个答案:

答案 0 :(得分:3)

在VM中使用两个属性,并在那里实现相等/覆盖逻辑。这正是虚拟机擅长的东西。

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

Prop1 setter的实现使得它也更新了Prop2(不要忘记INotifyPropertyChanged),如果你设置Prop2使它切换到并保持不同的值。

答案 1 :(得分: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的默认绑定是双向的)