让我用图片
解释我的问题我的项目中有MVVM结构。
我有两个文本块Textblock 1
和textblock 2
。现在,每当Textblock1的文本发生变化时,我希望textblock2's
文本与Textblock1's
文本相同。
但我应该可以将Textblock2's
文字设置为与Textblock1's
不同。
所以我正在设置Textblock1的文本属性的单向绑定。
如何在MVVM中获取Textblock2's
的Text属性。如果我为Textblock2's
Text属性创建了一个属性,我将无法将Textblock1's
文本绑定到textblock2
。
如果我想进一步澄清我的问题,请告诉我。
感谢您的期待。
答案 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的默认绑定是双向的)