Windows Phone应用程序(Silverlight 3)
我有一个文本块
<TextBlock Text="{Binding Key}" FontSize="40" Foreground="{Binding propertyOnAMainViewModel}" />
TextBlock的DataContext设置为一个类Group实例,它公开Key属性。
我需要将TextBlock的foreground属性绑定到动态(可设置的代码)属性,但是在不同的ViewModel上,而不是Group。
是否可以将一个元素上的不同属性绑定到不同的数据上下文?
答案 0 :(得分:2)
你可以这样做,但它不是非常优雅!每个绑定都有一个Source,如果没有指定,则是控件的DataContext
。如果在代码隐藏中构造绑定,则可以显式设置源。在XAML中,您唯一的选项是默认(即DataContext)或ElementName
绑定。
我要做的是创建一个ViewModel,它公开您希望绑定的属性,并将其用作DataContext
。
答案 1 :(得分:0)
如果您可以将一个VM托管在另一个VM中,这是最简单的:
public class TextBoxViewModel : ViewModelBase
{
private ChildViewModel _childVM;
public ChildViewModel ChildVM
{
get { return _childVM; }
set
{
if (_childVM == value)
return;
if (_childVM != null)
_childVM.PropertyChanged -= OnChildChanged;
_childVM = value;
if (_childVM != null)
_childVM.PropertyChanged += OnChildChanged;
OnPropertyChanged("ChildVM");
}
}
public Brush TextBoxBackground
{
get
{
if(ChildVM == null)
return null;
return ChildVM.MyBackground;
}
set
{
if (ChildVM != null)
ChildVM.MyBackground = value;
}
}
private void OnChildChanged(object sender, PropertyChangedEventArgs e)
{
if (string.IsNullOrEmpty(e.PropertyName) || e.PropertyName == "MyBackground")
OnPropertyChanged("TextBoxBackground");
}
}