绑定多个源

本文关键字:绑定 | 更新日期: 2023-09-27 18:01:24

好的,我有一组TextBlock。

<Grid x:Name="MyGrid">
   <TextBlock Text={Binding value1} />
   <TextBlock Text={Binding value2} />
</Grid>

和c#后端:

mydata.value1 = "value1";
mydata.value2 = "value2";
MyGrid.DataContext = mydata;

现在,我要像这样绑定Blocks的前景色:

//C#
private bool isViewingPage1;
private bool IsViewingPage1
{
   get { return this.isViewingPage1; }
   set
   {
      this.isViewingPage1 = value;
      NotifyPropertyChanged();
   }
}
//XAML
<Grid x:Name="MyGrid">
   <TextBlock Text={Binding value1} Foreground={Binding IsViewingPage1, Converter={StaticResource MyConverter}} />
   <TextBlock Text={Binding value2} Foreground={Binding IsViewingPage1, Converter={StaticResource MyConverter}} />
</Grid>

所以,如果IsViewingPage1 == true,第一个TextBlock将是绿色的,第二个将是红色的。如果错误,第一个将是红色,第二个将是绿色。转换器工作良好。但是如何将两个不同的值绑定到一个元素呢?

我试过这样做:

public class MyClass : INotifyPropertyChanged
{
   public MyDataType mydata;
   public bool IsViewingPage1;
   //INotifyPropertyChanged implemetation
}
//...
MyClass a = new MyClass();
a.mydata = mydata;
a.IsViewingPage1 = IsViewingPage1;
MyGrid.DataContext = a;
//XAML
<Grid x:Name="MyGrid">
   <TextBlock Text={Binding mydata.value1} Foreground={Binding IsViewingPage1, Converter={StaticResource MyConverter}} />
   <TextBlock Text={Binding mydata.value2} Foreground={Binding IsViewingPage1, Converter={StaticResource MyConverter}} />
</Grid>

…但这对我没有帮助。什么好主意吗?

绑定多个源

确定文本块的颜色或至少状态(颜色应该是特定于视图而不是在模型中定义的)的逻辑应该在视图模型中。所以你可以为每个文本块有一个状态并绑定到它们,在你的视图模型中,你可以根据IsViewingPage bool设置文本块的状态。

通知属性必须是公共的。把

private bool IsViewingPage1

public bool IsViewingPage1