这是我的 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中抛出一个错误,因为它期望一个无参数的构造函数!
如何为DataContext
设置UserControl
?
这样做的最佳方法是什么?
答案 0 :(得分:2)
从视图的构造函数中删除参数:
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">
有关详细信息,请参阅以下链接:http://brianlagunas.com/getting-started-prisms-new-viewmodellocator/
答案 1 :(得分:1)
您也可以在 view.xaml 中设置您的 DataContext
添加您的 viewModel 命名空间
xmlns:viewModel="using:YourApp.ViewModels"
然后在您的 xaml 标记中以这种方式设置
<UserControl.DataContext>
<viewModel:StudentViewModel x:Name="ViewModel" />
</UserControl.DataContext>
您在视图中获得一个 ViewModel 属性,类型为 StudentViewModel