如何将窗口或其子项的数据上下文绑定到窗口的一个特定属性

本文关键字:窗口 一个 属性 上下文 数据 绑定 | 更新日期: 2023-09-27 18:33:10

一个有点愚蠢的问题,但不知何故,我找不到如何将Window或其ContentDataContext(例如Grid面板)绑定到Window的一个特定属性(例如,在下面的示例中ViewModel):

法典:

internal partial class MyWin : Window
{
    public MyViewModelType ViewModel { get; set; }
    ...
}

XAML:

<Window x:Class="MyNs.MyWin"
        ...
        DataContext="{Binding RelativeSource={RelativeSource Self}}" />
    <Grid DataContext={Binding ViewModel}> <!-- doesn't work??? -->
        ...
    </Grid>
</Window>

如何将窗口或其子项的数据上下文绑定到窗口的一个特定属性

我认为你这样做的方式是错误的

如果您的窗口进行了连接,它将正常工作

public partial class MyWindow
{
    public MyWindow()
    {
        InitializeComponent();
        DataContext = ViewModel = new MyViewModelType();
    }
}

请定义视图模型的字段,因为它不会更改并实现 INPC

 private MyViewModelType viewmodel;
    public MyViewModelType ViewModel
    {
        get 
        { 
            if(viewmodel == null)
            {
                viewmodel = new MyViewModelType();
            }
            return viewmodel; 
        }
        set 
        { 
            viewmodel = value; 
            OnPropertyChanged("ViewModel")
        }
    }

其余代码保持不变。