【问题标题】:Binding Enum with entity not working将枚举与实体绑定不起作用
【发布时间】:2017-10-13 14:52:12
【问题描述】:

我有一个名为 IGdaily 的表,其中包含字段 Trans_Category。我想绑定一个显示枚举的 DataGridComboBoxColumn 并将其 int 值绑定到 datagrid 单元格 Trans_Category。 我的枚举

    public enum Enm_Purch_Ret : short
{
    Purchase = 1,
    Sale = 2,
    Return = 3
}

Viewmodel Vm_Purchase

public class Vm_Purchase : INotifyPropertyChanged
{
    private IGoldEntities db = new IGoldEntities();
    public ObservableCollection<IGdaily> Vm_IGdaily { get; set; }
    public ObservableCollection<Enm_Purch_Ret> Vm_Enum_P_R { get; set; }
    public Vm_Purchase()
    {
        Vm_IGdaily = new ObservableCollection<IGdaily>(); 
        Vm_Enum_P_R = new ObservableCollection<Enm_Purch_Ret>(Enum.GetValues(typeof(Enm_Purch_Ret)).Cast<Enm_Purch_Ret>().ToList());
    }
     public ObservableCollection<IGdaily> IGDailys
    {
        get { return Vm_IGdaily; }
        set { Vm_IGdaily = value; NotifyPropertyChanged(); }
    }
    public ObservableCollection<Enm_Purch_Ret> Enm_Purch_Rets
    {
        get { return Vm_Enum_P_R; }
        set { Vm_Enum_P_R = value; NotifyPropertyChanged(); }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

在 XAML 中

 <Window.DataContext>
    <local:Vm_Purchase/>
</Window.DataContext>
 <DataGrid x:Name="DG" ItemsSource="{Binding IGDailys}" AutoGenerateColumns="False" SelectionMode="Single" SelectionUnit="Cell" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding GroupName}" Header="Name" Width="200"/>
            <DataGridComboBoxColumn Header="Item/Metal" SelectedValueBinding="{Binding Trans_Category}" SelectedValuePath="{Binding Path=Enm_Purch_Rets, StringFormat='\{0:D\}'}" DisplayMemberPath="Enm_Purch_Ret">
                <DataGridComboBoxColumn.ElementStyle>
                    <Style TargetType="{x:Type ComboBox}">
                        <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Enm_Purch_Rets, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                    </Style>
                </DataGridComboBoxColumn.ElementStyle>
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="{x:Type ComboBox}">
                        <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Enm_Purch_Rets , RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>
            <DataGridTextColumn Binding="{Binding Trans_Category}" ClipboardContentBinding="{x:Null}" FontSize="14" Header="Metal Id" Width="100"/>
        </DataGrid.Columns>
    </DataGrid>


  public partial class IGdaily
{
    public int GDaily_Id { get; set; }
    public int DailyMast_Id { get; set; }
    public int ItemGroup_Id { get; set; }
    public int Item_Id { get; set; }
    public int Trans_Category { get; set; }
}

请帮助我在绑定方面有什么错误。我是 MVVM 模式的新手。 请解释 谢谢

【问题讨论】:

  • IGdaily 类是如何定义的?请张贴。
  • 好的,我已经使用模型 IGdaily 编辑了我的代码。谢谢

标签: wpf mvvm enums datagrid


【解决方案1】:

您不能将int 属性设置为Enm_Purch_Ret 值,因为这两种类型之间没有隐式转换。

但是您可以使用一个转换器类来为您执行转换:

public class EnumConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Enm_Purch_Ret e = (Enm_Purch_Ret)value;
        return (int)e;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int i = (int)value;
        return (Enm_Purch_Ret)i;
    }
}

用法:

<DataGrid x:Name="DG" ItemsSource="{Binding IGDailys}" AutoGenerateColumns="False" SelectionMode="Single" SelectionUnit="Cell" >
    <DataGrid.Resources>
        <local:EnumConverter x:Key="conv" />
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding GroupName}" Header="Name" Width="200"/>
        <DataGridComboBoxColumn Header="Item/Metal"
                                        SelectedItemBinding="{Binding Trans_Category, Converter={StaticResource conv}}">
            <DataGridComboBoxColumn.ElementStyle>
                <Style TargetType="{x:Type ComboBox}">
                    <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Enm_Purch_Rets, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                </Style>
            </DataGridComboBoxColumn.ElementStyle>
            <DataGridComboBoxColumn.EditingElementStyle>
                <Style TargetType="{x:Type ComboBox}">
                    <Setter Property="ItemsSource" Value="{Binding Path=DataContext.Enm_Purch_Rets , RelativeSource={RelativeSource AncestorType={x:Type Window}}}" />
                </Style>
            </DataGridComboBoxColumn.EditingElementStyle>
        </DataGridComboBoxColumn>
        <DataGridTextColumn Binding="{Binding Trans_Category}" ClipboardContentBinding="{x:Null}" FontSize="14" Header="Metal Id" Width="100"/>
    </DataGrid.Columns>
</DataGrid>

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 2015-12-21
    • 1970-01-01
    • 2023-03-27
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多