オブジェクトモデル:クライアントには多くの研究があり、多くの主題には多くの記録があります。ツリービューはクライアント/スタディ/サブジェクトを保持し、レコードはMainDataGridにあります。
問題:データグリッドのRecordオブジェクトの双方向バインディングプロパティの1つを変更すると、Recordオブジェクトのセッターが呼び出されません。この問題の理由を理解するためのwpfバインディングモデル/オブジェクトモデルについてまだ十分に理解していないため、この問題にどのように取り組むかがわかりません。
これはMVVMアプリではありません。コードビハインドでは、_loadedイベント中に、いくつかのデータをロードし、適切に実装されたObservableCollectionを介してTreeViewのデータコンテキストに割り当てます。TreeViewのSelectedItemChangedイベントで、関連するレコードをロードし、プロパティが変更されたハンドラーをフックアップします。
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:HPA.Studies.MCA.Client"
Title="Medra Coding Assistant" Height="800" Width="1250" MouseRightButtonDown="HandleRightClick">
<Window.Resources>
<local:HistoryTypeConverter x:Key="HistoryTypeConverter" />
<DataTemplate x:Key="MedraValuesTemplate">
<UniformGrid Columns="2" Rows="5">
<TextBlock Grid.Row="0" Grid.Column="0" Text="MedDRA LLT:" />
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding CodeValue2, Mode=TwoWay}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="MedDRA PT:" />
<TextBox Grid.Row="1" Grid.Column="1" Text="{Binding CodeValue1, Mode=TwoWay}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="MedDRA HLT:" />
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding CodeValue3, Mode=TwoWay}"/>
<TextBlock Grid.Row="3" Grid.Column="0" Text="MedDRA HLGT:" />
<TextBox Grid.Row="3" Grid.Column="1" Text="{Binding CodeValue4, Mode=TwoWay}"/>
<TextBlock Grid.Row="4" Grid.Column="0" Text="MedDRA SOC:" />
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding CodeValue5, Mode=TwoWay}"/>
</UniformGrid>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="8*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.ColumnSpan="3">
<TextBlock Text="Medra Coding Assistant" FontSize="15" FontWeight="Bold" />
<TextBlock Text="Available Batches:" />
</StackPanel>
<Grid x:Name="BindingRootGrid" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="4*"/>
</Grid.ColumnDefinitions>
<TreeView x:Name="tvClients" Grid.Column="0" ItemTemplate="{StaticResource NavigatorTemplate}" ItemsSource="{Binding}">
</TreeView>
<GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Left" Width="6" Panel.ZIndex="1" />
<DataGrid x:Name="MainDataGrid" Grid.Column="1" AutoGenerateColumns="False"
DataContext="{Binding ElementName=tvClients, Path=SelectedItem}" ItemsSource="{Binding Path=Records}">
<DataGrid.Columns>
<DataGridHyperlinkColumn Header=" " />
<DataGridTextColumn Header="Discrim" Binding="{Binding Discriminator, Mode=OneWay}" />
<DataGridTextColumn Header="Field Name" Binding="{Binding FieldName, Mode=OneWay}" />
<DataGridTextColumn Header="Field Value" Binding="{Binding FieldValue, Mode=OneWay}" Width="160">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTemplateColumn Header="MedDRA Value" CellTemplate="{StaticResource MedraValuesTemplate}" />
</DataGrid.Columns>
</DataGrid>
<GridSplitter Grid.Column="2" VerticalAlignment="Stretch" HorizontalAlignment="Left" Width="6" Panel.ZIndex="1" />
<DataGrid x:Name="HistoryDataGrid" Grid.Column="2" AutoGenerateColumns="False"
DataContext="{Binding ElementName=MainDataGrid, Path=SelectedItem, Mode=OneWay}" ItemsSource="{Binding Path=HistoryList}">
<DataGrid.Columns>
<DataGridTextColumn Header="DateTime" Binding="{Binding Path=TimeStamp, Mode=OneWay}"/>
<DataGridTextColumn Header="Event Type" Binding="{Binding Path=Description, Converter={StaticResource HistoryTypeConverter}, Mode=OneWay}"/>
<DataGridTextColumn Header="Data" Binding="{Binding Path=Data, Mode=OneWay}" Width="80">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="User" Binding="{Binding Path=UserName, Mode=OneWay}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
<Border Grid.Row="2" Grid.ColumnSpan="3">
<TextBlock Text="Control Panel Goes here" />
</Border>
</Grid>
欠落しているTreeViewItemTemplate:
<HierarchicalDataTemplate x:Key="BatchesTemplate" ItemsSource="{Binding Formats}">
<TextBlock Text="{Binding Path=BatchName}" />
<HierarchicalDataTemplate.ItemTemplate>
<HierarchicalDataTemplate>
<TextBlock Text="{Binding Name}" />
</HierarchicalDataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>