0

初めての MVVM WPF アプリケーションに関して助けが必要です。メイン ウィンドウで 2 つのビューをリンクしたいと考えています。状況は次のとおりです。

たとえば、次の 2 つのビューモデルがあります。

- PersonDetailViewModel
- PersonListViewModel

PersonListViewModel には以下が含まれます: -
呼び出されたPeopleObservableCollectionの 1 つPersonDetailViewModels
PersonDetailViewMode"SelectedPerson"

また、2 つのビューを作成しました:
PersonListViewデータグリッド内のすべての人をリストします。
PersonDetailViewにバインドされた一連のラベルとテキスト ボックスviewmodel PersonDetailViewModelです。

これら 2 つを MainWindow で一緒に使用したいと考えています。しかし、これがどのように機能するのかわかりません!これが私がこれまでに持っているものです:

PersonListView.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>

ここで、これらのユーザー コントロールを 1 つのウィンドウに結合/リンクして、データグリッドから行を選択すると他のユーザー コントロールの詳細を編集できるように連携させたいと考えています。

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正しく更新されます。PersonDetailViewのデータコンテキストをそれにバインドする方法がわかりませんSelectedPerson。誰かが私を助けることができれば。

4

1 に答える 1

1

変化する

<myViews:PersonDetailView Grid.Row="1" Grid.Column="0" DataContext="{Binding dgPersons.SelectedPerson, Mode=TwoWay}"/>

<myViews:PersonDetailView Grid.Row="1" Grid.Column="0" DataContext="{Binding Path=DataContext.SelectedPerson ElementName=dgPersons, Mode=TwoWay}"/>
于 2013-07-09T13:22:47.667 に答える