如何摆脱DataContext InitializeComponent中的StackOverflowexception?

我是wpf c#的新手,尝试一些示例应用程序,问题是当我在xaml中提到DataContext时, InitializeComponent被递归调用并显示

mscorlib.dll中发生了System.StackOverflowException

这是我的XAML标记:

                       

XAML.cs

  private ICommand m_ButtonCommand; public ICommand ButtonCommand { get { return m_ButtonCommand; } set { m_ButtonCommand = value; } } public MainWindow() { InitializeComponent(); ButtonCommand = new RelayCommand(new Action(ShowEmployees)); } 

如果您使用xaml.cs中的属性,则不需要提供数据上下文,因为它是相同的分部类

当您将数据上下文设置为MainWindow时,它会创建另一个MainWindow实例,并尝试将其数据上下文设置为MainWindow。 因此,进入无限循环给出stackoverflowexception。

在WPF中的codeproject DataContext中了解有关DataContext属性的更多信息

如果您正在使用另一个类进行视图模型,那么您需要通过定位器提供数据上下文

  

和locator将是Resources.xaml中的资源

   

您可以在geekchamp中获取定位器类和有关MVVM模式的更多详细信息使用MVVM-Light中的简单ViewModelLocator

DataContext属性描述如下:

直接嵌入的对象,用作父元素中任何绑定的数据上下文。 通常,此对象是Binding或另一个BindingBase派生类。 或者,可以在此处放置用于绑定的任何CLR对象类型的原始数据,稍后定义实际绑定。

在您的XAML中,主窗口的DataContext是….您的主窗口。 所以创建了主窗口的另一个实例。 其中有一个类型为DataContext的主窗口。

所以创建了主窗口的另一个实例。 其中有一个类型为DataContext的主窗口。

所以创建了主窗口的另一个实例。 其中有一个类型为DataContext的主窗口。

所以创建了主窗口的另一个实例。 其中有一个类型为DataContext的主窗口。

所以……

;)

将DataContext设置为包含要绑定窗口的数据的对象,而不是窗口本身。

希望这可以帮助