我有一个包含控件的窗口。控件如何确定要使用哪个DataContext?
该控件的viewmodel设置为DataContext对象。
Window对象将其自己的ViewModel设置为DataContext。
如果我在Window XAML中绑定控件的属性,它如何确定要使用哪个DataContext?
我有一个包含控件的窗口。控件如何确定要使用哪个DataContext?
该控件的viewmodel设置为DataContext对象。
Window对象将其自己的ViewModel设置为DataContext。
如果我在Window XAML中绑定控件的属性,它如何确定要使用哪个DataContext?
数据上下文使用底部方法解决。这意味着首先在控制本身中搜索属性,然后是控制的父母,然后是专利的父母等,直到它找到属性或到达根窗口。
有一些可能的方式:
1)您可以从后面会是什么数据上下文的代码决定:DataContext = this;
< - 例如
2)您可以通过DictionaryResources做到这一点,你可以在App.xaml中写:
<DataTemplate DataType="{x:Type viewModel:SolutionsToRecoverViewModel}">
<someView:SolutionsRecovery/>
</DataTemplate>
3)你可以创建一个字典文件给自己买(写拉斯维加斯XAML代码),并在该窗口中的初始化注册它:
public class someClass
{
private static bool _registerUIMapping = false;
public CopyNPasteBottemViewModel()
{
if (!_registerUIMapping)
{
ResourceDictionary MyResourceDictionary = new ResourceDictionary();
MyResourceDictionary.Source = new Uri("somePath/UIMapping.xaml", UriKind.Relative);
Application.Current.Resources.MergedDictionaries.Add(MyResourceDictionary);
_registerUIMapping = true;
}
}
private bool _doThisForTheNextConflictProperty = false;
public bool DoThisForTheNextConflict
{
get
{
return _doThisForTheNextConflictProperty;
}
set
{
_doThisForTheNextConflictProperty = value;
OnPropertyChanged("DoThisForTheNextConflict");
}
}
}
谢谢,但是如果我想将控件的属性绑定到窗口数据上下文的属性呢? – Hristo
您可以使用绑定属性中存在的元素名称属性。只需在路径后面设置ElementName为窗口名称 –
实际称为“属性值继承”(https://msdn.microsoft.com/en-us/library/ms753197(v = vs .100)的.aspx)。 – Clemens