【问题标题】:Binding to ViewModel instance from View从 View 绑定到 ViewModel 实例
【发布时间】:2015-04-13 16:05:33
【问题描述】:

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

【问题讨论】:

    标签: wpf mvvm view binding viewmodel


    【解决方案1】:

    您可以删除 UserControl.DataContext 并添加 ItemsControl.ItemTemplate。由于每个 ItemsControl 都绑定到人员视图模型列表。每个项目都会将视图模型作为其数据上下文。参考以下代码。

    <ItemsControl ItemsSource="{Binding ViewModels}" Margin="4">
    <ItemsControl.ItemTemplate>
        <DataTemplate  DataType="{x:Type vm:PersonsViewModel}">
            <vw:PersonsView />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 2012-03-18
      相关资源
      最近更新 更多