控件如何确定要使用哪个DataContext

本文关键字:DataContext 何确定 控件 | 更新日期: 2023-09-27 18:08:04

我有一个包含控件的窗口

控件有一个视图模型集作为DataContext对象。

Window对象有自己的ViewModel集作为DataContext。

如果我在窗口XAML内绑定控件的属性,它如何确定使用哪个DataContext ?

控件如何确定要使用哪个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");
        }
    }
}