我想多次示例化一个UserControl。我尝试使用MVVM方法。例如,在MainWindow.xaml中
<StackPanel Orientation="Vertical">
<GroupBox x:Name="Default Transition" Header="Global Transitions" MaxWidth="500">
<uc:TransitionsForm x:Name="GlobalTrans"/>
</GroupBox>
<GroupBox x:Name="Slide Transition" Header="Slide Transitions" MaxWidth="500">
<uc:TransitionsForm x:Name="SlideTrans"/>
</GroupBox>
</StackPanel>
第一个示例是未定义幻灯片切换时使用的默认切换。
我的视图模型叫做TransitionViewModel,我把视图模型连接到xaml中的UserControl,如下所示
<UserControl.Resources>
<Style x:Key="cbTransStyle" TargetType="ComboBox">
<Setter Property="Margin" Value="14,5,5,5"/>
<Setter Property="Height" Value="30"/>
<Setter Property="SelectedIndex" Value="0"/>
<Setter Property="SelectedValuePath" Value="Content"/>
</Style>
<tranconv:KeyValConverter x:Key="KeyValConvert"/>
<vm:TransitionViewModel x:Key="TransVM"/>
</UserControl.Resources>
然后在UserControl的网格中设置DataContext。
<Grid DataContext="{StaticResource TransVM}">
我的问题是视图模型如何知道哪个视图示例发生了变化?我可以在MainWindow中添加一个事件处理程序,但这听起来不像MVVM方法。如果我可以访问视图名称,这也会起作用。
1条答案
按热度按时间0yg35tkg1#
正如评论中指出的,你应该在主视图模型中示例化子视图模型,并绑定到它们。
不要忘记删除
UserControl
中的DataContext
设置,它大多必须来自外部。