从View绑定到ViewModel实例

时间:2015-04-13 16:05:34

标签: wpf mvvm view binding viewmodel

我有程序在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>

1 个答案:

答案 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>