当我用其他类实现 MainWindow 时,DataContext 不起作用



我是WPF的新手,我正在执行以下代码:

 public partial class MainView : ViewModelControl
    {
        public MainView()
        {
            InitializeComponent();
            this.DataContext = new ViewModel1();
        }
}

如您所见,我有自己的类ViewModelControl。我在视图模型控件类下面有以下代码:

 public partial class ViewModelControl : Window, IViewModelControl
    {
        public virtual void bindFirstDataContext()
        {
        }
        public virtual void bindSecondDataContext()
        {
        }
    }

我将以下 XAML 修改为:

<Window x:Class="WpfApplication1.View.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainView" Height="262" Width="316">

现在的问题是它的显示错误"'WpfApplication1.View.MainView'的部分声明不能指定不同的基类"。默认情况下,当我使用 Window 类实现它时,它不像以前那样工作。我哪里做错了?

分部类声明的基类应该相同。你已将代码中的窗口隐藏更改为视图模型控件,因此也需要在 XAML 中更新。

将 XAML 声明更改为以下内容:

<local:ViewModelControl
        x:Class="WpfApplication1.View.MainView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Namespace"> <-- HERE replace Namepsace with
                                                   actual namespace of class
                                                   ViewModelControl.
 ....
</local:ViewModelControl/>

您需要更改 XAML:

<src:ViewModelControl x:Class="WpfApplication1.Interface.MainView"  
 xmlns:src="clr-namespace:WpfApplication1.Interface" ...>
</src:ViewModelControl>

这将起作用,在类属性中要小心,写下类的全名("命名空间")。类的名称")

在"xmlns:src="clr-namespace:"之后,您需要编写 ViewModelControl 所在的命名空间。

它需要这样,因为 MainView 不直接从窗口继承,因此如果它不是窗口的直接子级,则不能将类名放在窗口的类属性中。

通过此更改,它应该可以工作,我试过了,如果您仍然遇到一些问题,请再次查看命名空间名称,很容易混淆。

相关内容

最新更新