绑定多个源
本文关键字:绑定 | 更新日期: 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