2015-08-16 60 views
0

我有一个包含控件的窗口。控件如何确定要使用哪个DataContext?

该控件的viewmodel设置为DataContext对象。

Window对象将其自己的ViewModel设置为DataContext。

如果我在Window XAML中绑定控件的属性,它如何确定要使用哪个DataContext?

回答

2

数据上下文使用底部方法解决。这意味着首先在控制本身中搜索属性,然后是控制的父母,然后是专利的父母等,直到它找到属性或到达根窗口。

+0

谢谢,但是如果我想将控件的属性绑定到窗口数据上下文的属性呢? – Hristo

+0

您可以使用绑定属性中存在的元素名称属性。只需在路径后面设置ElementName为窗口名称 –

+0

实际称为“属性值继承”(https://msdn.microsoft.com/en-us/library/ms753197(v = vs .100)的.aspx)。 – Clemens

1

有一些可能的方式:

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"); 
     } 
    } 

} 
相关问题