C# WPF XAML:DataContext作为XAML元素的属性或属性之间的差异?
我目前正在开始使用XAML,我有一个关于如何定义元素的DataContext的问题 我创建了一个视图,其中包含具有以下标记的页面:C# WPF XAML:DataContext作为XAML元素的属性或属性之间的差异?,c#,wpf,xaml,C#,Wpf,Xaml,我目前正在开始使用XAML,我有一个关于如何定义元素的DataContext的问题 我创建了一个视图,其中包含具有以下标记的页面: <Page x:Class="View.MainView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas
<Page x:Class="View.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ViewModel="clr-namespace:ViewModel"
mc:Ignorable="d"
Title="MainView">
...
</Page>
...
当我想为该页面提供一个供子元素使用的DataContext时,可以这样做:
<Page x:Class="View.MainView"
...
mc:Ignorable="d"
Title="MainView">
<Page.DataContext>
<ViewModel:MainViewModel />
</Page.DataContext>
...
</Page>
...
但这并不是:
<Page x:Class="View.MainView"
...
mc:Ignorable="d"
Title="MainView" DataContext="ViewModel:MainViewModel">
...
</Page>
...
对我来说,Page元素似乎希望将数据源定义为XAML属性,而不是属性。然而,VisualStudio中的IntelliSense为页面提供了一个DataContext属性,所以我想我只是使用了一个错误的语法。你能告诉我吗
谢谢 > P> <强> > 使用属性指定<代码> DATACONTEXT/<代码>,但您应该考虑如何将VIEW模型实例化。 以这种方式使用属性
<Page.DataContext>
<ViewModel:MainViewModel />
</Page.DataContext>
但是您希望WPF为您创建一个实例
因此,您可以使用例如绑定
或静态资源
/动态资源
将创建的实例分配给数据上下文
属性:
DataContext="{Binding ViewModel}"
或
< />代码> < <强> > 使用属性指定<代码> DATACONTEXT/<代码>,但您应考虑如何将VIEW模型实例化。
以这种方式使用属性
<Page.DataContext>
<ViewModel:MainViewModel />
</Page.DataContext>
但是您希望WPF为您创建一个实例
因此,您可以使用例如绑定
或静态资源
/动态资源
将创建的实例分配给数据上下文
属性:
DataContext="{Binding ViewModel}"
或
我在这里猜测,但第一个示例需要一个实例,而第二个示例似乎没有实例化一个实例。在视图中,我的代码中没有任何内容。通过调试,我发现(工作)示例调用了ViewModel类的无参数公共构造函数。DataContext=“ViewModel:MainViewModel”
仅将字符串“ViewModel:MainViewModel”分配给DataContext属性。它不会(也不应该)创建MainViewModel类的实例。请参阅MSDN上的文章。我在这里猜测,但第一个示例需要一个实例,而第二个示例似乎没有实例化一个实例。我的代码中没有任何内容。通过调试,我发现(工作)示例调用了ViewModel类的无参数公共构造函数。DataContext=“ViewModel:MainViewModel”
仅将字符串“ViewModel:MainViewModel”分配给DataContext属性。它不会(也不应该)创建MainViewModel类的实例。请参考MSDN上的文章。谢谢,这是一个很好的解释。如果我理解正确,在我使用的任何视图中,我都必须实例化视图模型的一个对象,然后在XAMLs子元素中绑定到它?@Rosenheimer,不是真的。可以先创建viewmodel(例如,由另一个viewmodel创建),然后WPF将为其创建一个视图,并自动将viewmodel附加到该视图(请参见数据模板)。您可以在代码隐藏中创建viewmodel(例如,在视图的构造函数中),并将其分配给视图的DataContext
属性。可以使用IoC容器将viewmodel注入视图中。有很多方法可以创建viewmodel并将其附加到视图的DataContext
属性。我建议你多读一些,谢谢,这是一个很好的解释。如果我理解正确,在我使用的任何视图中,我都必须实例化视图模型的一个对象,然后在XAMLs子元素中绑定到它?@Rosenheimer,不是真的。可以先创建viewmodel(例如,由另一个viewmodel创建),然后WPF将为其创建一个视图,并自动将viewmodel附加到该视图(请参见数据模板)。您可以在代码隐藏中创建viewmodel(例如,在视图的构造函数中),并将其分配给视图的DataContext
属性。可以使用IoC容器将viewmodel注入视图中。有很多方法可以创建viewmodel并将其附加到视图的DataContext
属性。我建议你多读一些。