XAML绑定多个源

时间:2015-07-07 21:32:26

标签: c# xaml binding windows-phone-8.1 datacontext

好的,我有一套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 Foreground颜色,如下所示:

//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将为绿色,第二个将为红色。如果为false,则第一个为红色,第二个为绿色。转换器工作正常。但是我如何将两个不同的值绑定到一个元素?

我试过这样的事情:

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>

......但它对我没有帮助。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

确定文本块的颜色或至少状态(颜色应该是模型中未定义的特定视图)的逻辑应该在视图模型中。因此,您可以拥有每个文本块的状态并绑定到它们,在视图模型中,您可以根据IsViewingPage bool设置文本块的状态。

答案 1 :(得分:0)

通知的属性必须是公开的。变化

private bool IsViewingPage1

public bool IsViewingPage1