如何使用 prism wpf 为用户控件设置数据上下文?

How to set data context for user control with prism wpf?

这是我的view.xaml:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height=".5*"/>
        <RowDefinition Height="0.5*"/>
    </Grid.RowDefinitions>

    <Grid Grid.Row="0" x:Name="grdFormSearch" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
        <local:StudentUserControl HorizontalAlignment="Stretch" Height="100" VerticalAlignment="Stretch"/>
    </Grid>
</Grid>

上面我在view.xaml中添加了一个StudentUserControl

StudentUserControl.xaml.cs:

public partial class StudentUserControl : UserControl
{
   public StudentUserControl(StudentViewModel ViewModel)
   {
       InitializeComponent();
       this.DataContext = ViewModel;
   }
}

StudentViewModel.cs:

public StudentViewModel(IEventAggregator eventAggregator, IUnityContainer container)
{
     _eventAggregator = eventAggregator;
     _container = container;
}

它在 xaml 中抛出一个错误,因为它需要一个无参数的构造函数!

如何设置DataContextUserControl? 最好的方法是什么?

从视图的构造函数中删除参数:

public partial class StudentUserControl : UserControl
{
    public StudentUserControl()
    {
        InitializeComponent();
    }
}

如果您希望能够像您在此处所做的那样在 XAML 标记中创建视图的实例,那么它不应该存在:

<local:StudentUserControl HorizontalAlignment="Stretch" Height="100" VerticalAlignment="Stretch"/>

此外,您不应该在代码隐藏中显式设置视图的 DataContext。在大多数情况下,DataContext 应该从父元素继承,即在您的情况下为 view.xaml,如果您在视图的构造函数中显式设置 DataContext,则会破坏继承。

如果父视图由于某种原因没有 DataContext,您可以使用 Prism 的视图模型定位器来创建视图模型:

<UserControl x:Class="WpfApplication1.StudentUserControl"
    ...
    xmlns:prism="http://prismlibrary.com/"
    prism:ViewModelLocator.AutoWireViewModel="True">

请参考以下link了解更多相关信息:http://brianlagunas.com/getting-started-prisms-new-viewmodellocator/

您还可以在 view.xaml

中设置您的 DataContext

添加您的 viewModel 命名空间

xmlns:viewModel="using:YourApp.ViewModels"

然后在您的 xaml 标记中这样设置

<UserControl.DataContext>
    <viewModel:StudentViewModel x:Name="ViewModel" />
</UserControl.DataContext>

您在您的视图中获得了一个类型为 StudentViewModel

的 ViewModel 属性