wpf MVVM 中的多个 DataContext?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21760263/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 10:49:53  来源:igfitidea点击:

Multiple DataContext in wpf MVVM?

wpfmvvm

提问by darthwillard

i have a window that i'd like to bind the data context from 2 different DataModels from. i've come across this post: WPF binding multiple controls to different datacontextsand it's not working in my code. i don't know if you have to set a 'new' instance of the classes to make it work, but i can't get it to show my data. here's a sample

我有一个窗口,我想从中绑定来自 2 个不同 DataModel 的数据上下文。我遇到过这篇文章: WPF 将多个控件绑定到不同的数据上下文,但它在我的代码中不起作用。我不知道您是否必须设置类的“新”实例才能使其工作,但我无法让它显示我的数据。这是一个示例

<Grid>
    <Button Command="{Binding FurnaceDataViewModel.StartButtonCommand}"/>
    <Button Command="{Binding FurnaceDataViewModel.StopButtonCommand}"/>
    <Button Command="{Binding FurnaceDataViewModel.ClearButtonCommand}"/>

    <Label Content="{Binding FurnaceDataModel.TotalTimeIdle}" />
    <Label Content="{Binding FurnaceDataModel.GallonsUsed}" />
    <Label Content="{Binding FurnaceDataModel.TotalMoney}" />
    <Label Content="{Binding FurnaceDataModel.TotalTimeRun}" />       

</Grid>

i have my MainWindow Class:

我有我的 MainWindow 类:

FurnaceDataContext dataContext = new FurnaceDataContext();
InitializeComponent();
DataContext = dataContext;

here's my DataContext class

这是我的 DataContext 类

class FurnaceDataContext
{
    public FurnaceDataViewModel FurnaceDataViewModel { get; set; }
    public FurnaceDataModel FurnaceDataModel { get; set; }
    public SqlDataModel SqlDataModel { get; set; }
}

i can't get it to display my text correctly or my button commands. any ideas?

我无法让它正确显示我的文本或我的按钮命令。有任何想法吗?

回答by codeSetter

You need to instantiate inner props....

您需要实例化内部道具....

    FurnaceDataContext dataContext = new FurnaceDataContext();

    dataContext.FurnaceDataViewModel  = new FurnaceDataViewModel();
    dataContext.FurnaceDataModel = new FurnaceDataModel();

    DataContext = dataContext;