我需要一些关于我的第一个 MVVM WPF 应用程序的帮助。我想在我的主窗口上链接两个视图。情况如下:
例如,我有这两个视图模型:
- PersonDetailViewModel
- PersonListViewModel
PersonListViewModel 包含:
- 一个ObservableCollection
名为PersonDetailViewModels
People
- 一个PersonDetailViewMode
l 可通过名为的公共属性访问"SelectedPerson"
我还创建了两个视图:
PersonListView
,它列出了数据网格中的所有人员。
PersonDetailView
,这只是一堆绑定到viewmodel
PersonDetailViewModel
.
我想在我的 MainWindow 上同时使用这两个。但我不知道如何使这项工作!这是我到目前为止所拥有的:
个人列表视图.xaml
<UserControl x:Class="DSS.View.PersonListView"
...
xmlns:myViewModels="clr-namespace:DSS.ViewModel">
<UserControl.DataContext>
<myViewModels:PersonListViewModel/>
</UserControl.DataContext>
<Grid>
<DataGrid x:Name="dgPeople" ItemsSource="{Binding People}" AutoGenerateColumns="False" IsReadOnly="True" ColumnWidth="*"
SelectedItem="{Binding SelectedPerson}">
<DataGrid.Columns>
<DataGridTextColumn Header="PersonId" Binding="{Binding PersonId}" Visibility="Hidden"/>
<DataGridTextColumn Header="Firstname" Binding="{Binding Firstname}"/>
<DataGridTextColumn Header="Lastname" Binding="{Binding Lastname}"/>
...
</DataGrid.Columns>
</DataGrid>
</Grid>
PersonDetailView.xaml:
<UserControl x:Class="DSS_CV.View.PersonDetailView"
...
xmlns:myViewModels="clr-namespace:DSS.ViewModel">
<UserControl.DataContext>
<myViewModels:PersonDetailViewModel/>
</UserControl.DataContext>
<Grid>
<Grid.ColumnDefinitions>... </Grid.ColumnDefinitions>
<Grid.RowDefinitions>...</Grid.RowDefinitions>
<Label Grid.Row="0" Grid.Column="0">Firstname:</Label>
<TextBox Grid.Row="0" Grid.Column="1" x:Name="txtFirstName" Text="{Binding Path=Firstname}"></TextBox>
<Label Grid.Row="1" Grid.Column="0">Lastname:</Label>
<TextBox Grid.Row="1" Grid.Column="1" x:Name="txtLastName" Text="{Binding Path=Lastname}"></TextBox>
<Label Grid.Row="2" Grid.Column="0">Birthdate:</Label>
<TextBox Grid.Row="2" Grid.Column="1" x:Name="txtBirtDate" Text="{Binding Path=DateOfBirth}"></TextBox>
...
<WrapPanel Grid.Row="7" Grid.ColumnSpan="5">
<Button>Update</Button>
<Button>Insert As New</Button>
</WrapPanel>
</Grid>
现在,我想在一个窗口中组合/链接这些用户控件,以便它们以从数据网格中选择一行允许编辑另一个用户控件中的详细信息的方式协同工作。
MainWindow.xaml:
<Window x:Class="DSS_CV.MainWindow"
...
xmlns:myViews="clr-namespace:DSS_CV.View">
<Grid>
<myViews:PersonListView x:Name="dgPersons" Grid.Row="0" Grid.Column="0"/>
<myViews:PersonDetailView Grid.Row="1" Grid.Column="0" DataContext="{Binding dgPersons.SelectedPerson, Mode=TwoWay}"/>
</Grid>
</Window>
INotifyPropertyChanged
在我的类中随处实现,并且选择不同的行正确PersonListView
更新其属性SelectedPerson
。现在我看不到如何将 datacontext 绑定PersonDetailView
到那个SelectedPerson
. 如果有人可以帮助我。