C#WPF我如何拥有多个DataContext

C#WPF我如何拥有多个DataContext,c#,wpf,mvvm,C#,Wpf,Mvvm,我对WPF非常陌生,所以尽管找到了其他类似的线程,但我的代码有点不同,所以我不知道如何将这些解决方案应用到我的代码中 <grid> <CheckBox x:Name="sortChk" Content="Sort Variables" IsChecked="{Binding SortVariables}" /> <b:FlatButton Command="{Binding ClickCom

我对WPF非常陌生,所以尽管找到了其他类似的线程,但我的代码有点不同,所以我不知道如何将这些解决方案应用到我的代码中

<grid>
    <CheckBox
        x:Name="sortChk"
        Content="Sort Variables"
        IsChecked="{Binding SortVariables}"
     />
    <b:FlatButton  Command="{Binding ClickCommand}">
            <TextBlock Text="Compare" FontSize="13"></TextBlock>
    </b:FlatButton>

</grid>
您可以看到我已经注释掉了DataContext=this。如果我不注释它并删除其他DataContext,那么我的SortVariables变量将采用复选框的值。如果我有按钮单击的其他DataContext,那么复选框将不会绑定。当我将其作为参数传递给DataCompareVM()时,需要将其绑定


我对WPF和MVVM非常陌生,请原谅我的无知。

一个WPF控件不能有多个DataContext,您应该将属性移动到ViewModel。

一个WPF控件不能有多个DataContext,您应该将属性移动到ViewModel。

是,对于不同的元素,可以有不同的数据上下文。但在这里,您试图替换相同的窗口数据上下文

您可以做的是使用命名元素。将注释行替换为:

sortChk.DataContext = this;
现在,最长的答案是:您在这里并不是真正在做MVVM。正如Fildor提到的,您应该将SortVariables属性移动到DataCompareVM ViewModel


由于您似乎在与MVVM作斗争,我相信阅读我的介绍性书籍将有助于您理清思路:。

是的,对于不同的元素,您可以有不同的数据上下文。但在这里,您试图替换相同的窗口数据上下文

您可以做的是使用命名元素。将注释行替换为:

sortChk.DataContext = this;
现在,最长的答案是:您在这里并不是真正在做MVVM。正如Fildor提到的,您应该将SortVariables属性移动到DataCompareVM ViewModel


由于您似乎在与MVVM作斗争,我相信阅读我的介绍性书籍将有助于您把事情弄清楚:.

SortVariables
应该是DataCompareVM的一个属性,如果您希望将复选框绑定到它。勾选/取消勾选复选框后,双向绑定将更新ViewModel中的属性值。还记得在设置了不同的值时引发propertychanged事件。我这样做了,它可以正常工作。谢谢<如果要将复选框绑定到DataCompareVM,则code>SortVariables应该是DataCompareVM的属性。勾选/取消勾选复选框后,双向绑定将更新ViewModel中的属性值。还记得在设置了不同的值时引发propertychanged事件。我这样做了,它可以正常工作。谢谢好的,您可以将子控件设置为不同的DC。。。不完全是将两个DCs设置为一个控件,但是……是的,你可以这样做,但是因为他使用的是MVVM模式,如果他使用一个DataContext,那就更清楚了。我完全同意。我只是想说,如果我们想挑剔,在一个控件中使用多个DataContext确实是可能的。我不是说“你应该”:)好吧,你可以将一个子控件设置为不同的DC。。。不完全是将两个DCs设置为一个控件,但是……是的,你可以这样做,但是因为他使用的是MVVM模式,如果他使用一个DataContext,那就更清楚了。我完全同意。我只是想说,如果我们想挑剔,在一个控件中使用多个DataContext确实是可能的。我不是说“您应该”:)我将SortVariables属性移动到DataCompareVM,它正在按我所希望的方式工作。谢谢出于好奇,由于我是MVVM新手,我向DataCompreVM传递参数(…我的参数…)这一事实是否打破了MVVM模式?不。MVVM模式是一种社区构建的模式,它有许多变体。您的路径参数没有破坏MVVM模式。我已将SortVariables属性移动到DataCompareVM,它正按照我的要求工作。谢谢出于好奇,由于我是MVVM新手,我向DataCompreVM传递参数(…我的参数…)这一事实是否打破了MVVM模式?不。MVVM模式是一种社区构建的模式,它有许多变体。您的路径参数不会破坏MVVM模式。