繁体   English   中英

WPF Datagrid ComboboxColumn数据绑定

[英]WPF Datagrid ComboboxColumn Databinding

我有一个非常简单的数据库,其中包含两个表,一个表代表Books,另一个表代表Genre。 我已经使用了第一代的Entity Framework模型来创建它,现在我想在WPF Datagrid中表示它。 Datagrid应该将“书籍类型”显示为“组合框”列,但是我无法正确绑定它。

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

这显示了combox中的流派列表,但是当我运行该应用程序时,我无法显示每本书的正确流派。

我认为您不应该同时使用选定的项目绑定和选定的值路径。 我会先去的。 另外,您不应该处理选定的项目更改事件,这不是非常mvvm的事件,而应该处理实体的INotifyPropertyChanged。

如果那不能解决问题,那么我认为问题一定在您的模型类中。 为了使这种绑定生效,必须将您的实体对象的genre属性设置为与可用类型列表中的类型完全相同的实例,即。 两者必须是完全相同的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM