1

2 つのテーブルを含む非常に単純なデータベースがあります。1 つは本を表し、もう 1 つはジャンルを表します。Entity Framework モデルの第 1 世代を使用して作成しましたが、WPF Datagrid で表現したいと考えています。Datagrid は本のジャンルを Combobox 列として表示することになっていますが、正しくバインドできません。

<Window x:Class="TestApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestApp"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <ObjectDataProvider IsAsynchronous="True" x:Key="BookDataProvider" ObjectType="{x:Type local:BookDataProvider}">
    </ObjectDataProvider>
    <ObjectDataProvider x:Key="Books" ObjectInstance="{StaticResource BookDataProvider}" MethodName="GetAllBooks"></ObjectDataProvider>
    <ObjectDataProvider x:Key="GenreDataProvider" ObjectType="{x:Type local:GenreDataProvider}" IsAsynchronous="True">
    </ObjectDataProvider>
    <ObjectDataProvider x:Key="Genres" ObjectInstance="{StaticResource GenreDataProvider}" MethodName="GetAllGenres"></ObjectDataProvider>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource Books}}">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="179*" />
        <ColumnDefinition Width="32*" />
        <ColumnDefinition Width="292*" />
    </Grid.ColumnDefinitions>
    <DataGrid AutoGenerateColumns="False" Grid.ColumnSpan="3" Height="311" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" Width="503" SelectionChanged="dataGrid1_SelectionChanged" ItemsSource="{Binding}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Title" Binding="{Binding Title}" />
            <DataGridTextColumn Header="ISBN" Binding="{Binding ISBN}"/>
            <DataGridTextColumn Header="Author" Binding="{Binding Author_AuthorName}"/>
            <DataGridComboBoxColumn Visibility="Visible" IsReadOnly="False"  Header="Genre" SelectedItemBinding="{Binding Genre}" SelectedValuePath="Genre" DisplayMemberPath="Name" ItemsSource="{Binding Source={StaticResource Genres}}"/>                
        </DataGrid.Columns>
    </DataGrid>
</Grid>

これは、コンボボックス内のジャンルのリストを表示しますが、アプリケーションを実行すると、各本の正しいジャンルを表示できません。

4

1 に答える 1

1

選択したアイテムのバインディングと選択した値のパスの両方を使用する必要はないと思います。私は最初に行きます。また、選択した項目の変更イベントを処理するべきではありません。これは mvvm 風ではありませんが、代わりにエンティティの INotifyPropertyChanged を処理します。

それでも問題が解決しない場合は、問題はモデル クラスにあるに違いないと思います。このバインディングを機能させるには、エンティティ オブジェクトのジャンル プロパティを、利用可能なジャンル リストのジャンルとまったく同じインスタンスに設定する必要があります。この 2 つはまったく同じオブジェクトでなければなりません。

于 2012-08-21T22:31:20.757 に答える