我有程序在MainWindowViewModel的构造函数中初始化PersonsViewModel。
public MainWindowViewModel()
{
PersonsViewModel viewModel = new PersonsViewModel();
}
在MainWindow.xaml中,PersonsViewModel和PersonsView已连接。
<Window.Resources>
<DataTemplate DataType="{x:Type vm:PersonsViewModel}">
<vw:PersonsView />
</DataTemplate>
</Window.Resources>
我使用viewModel作为ItemsControl ItemsSource。
<ItemsControl ItemsSource="{Binding viewModel}" Margin="4" />
现在我的程序打开UserControl,我需要将PersonsViewModel的实例设置为UserControl.DataContext。
<UserControl.DataContext>
<vm:PersonsViewModel />
</UserControl.DataContext>
我是否在创建PersonsViewModel的新实例。如果我这样做,那么我如何将它绑定到PersonsViewModel实例?因为我在UserControl中有以下代码。我将PersonsList绑定到ItemsSource,我需要将Command绑定到PersonsViewModel实例。
<ItemsControl ItemsSource="{Binding PersonsList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Width="50" Text="{Binding Name}" />
<Button Content="Ok" Width="20" Margin="3" Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}}, Path=DataContext.Command}" CommandParameter="{Binding Name}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 0 :(得分:0)
您可以删除UserControl.DataContext和Add ItemsControl.ItemTemplate。由于每个ItemsControl都绑定到人员视图模型列表。每个项目都将viewmodel作为其datacontext。请参阅以下代码。
<ItemsControl ItemsSource="{Binding ViewModels}" Margin="4">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:PersonsViewModel}">
<vw:PersonsView />
</DataTemplate>
</ItemsControl.ItemTemplate>