2013-07-09 61 views
0

我需要一些關於我的第一個MVVM WPF應用程序的幫助。我想在我的主窗口上鍊接兩個視圖。這裏的情況:WPF MVVM鏈接視圖

我有,例如這兩個的ViewModels:

- PersonDetailViewModel 
- PersonListViewModel 

PersonListViewModel包含:
- 一個PersonDetailViewMode L的作爲通過名爲"SelectedPerson"公共屬性進行訪問 - 的PersonDetailViewModels叫人
ObservableCollection

我也創建了兩個視圖:
PersonListView,它列出了數據網格中的所有人員。
PersonDetailView,這只是一堆綁定到viewmodelPersonDetailViewModel的標籤和文本框。

我想在我的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> 

現在,我想結合/鏈接這些用戶控制在一個窗口中,因此它們以一種方式一起工作從datagrid中獲取一行允許編輯其他用戶控件中的詳細信息。

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的datacontext綁定到SelectedPerson。如果有人能幫助我。

回答

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}"/> 
+0

感謝您的幫助!它現在有效! – user2135342

+0

沒問題!如果它解決了你的問題,你可以將其標記爲已解決。 –