【问题标题】:DataGridComboBoxColumn: how to set TextBindingDataGridComboBoxColumn:如何设置 TextBinding
【发布时间】:2015-08-06 18:16:54
【问题描述】:

我正在使用 C#、.NET Framework 4.5.1、MVVM Light 框架和 Entity Framework 6.1.3 开发 WPF。

我在窗口中有这个DataGrid

<DataGrid x:Name="LevelConfigurationDataGrid" Grid.Column="1" Grid.Row="1" Margin="20,0" ItemsSource="{Binding LevelConfigs}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding CODE_LEVEL}" Header="Nivel"/>
        <DataGridTextColumn Binding="{Binding LEVEL_NAME}" Header="Nombre"/>
        <DataGridCheckBoxColumn Binding="{Binding IS_ACTIVE}" Header="¿Activa?"/>
        <DataGridComboBoxColumn Header="Tipo de código" SelectedValueBinding="{Binding CODE_TYPE}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
        <DataGridComboBoxColumn Header="Origen del código" SelectedValueBinding="{Binding CODE_SOURCE}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
        <DataGridComboBoxColumn Header="Tipo de Helper Code" SelectedValueBinding="{Binding HELPER_CODE_TYPE}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
        <DataGridComboBoxColumn Header="Origen de Helper Code" SelectedValueBinding="{Binding HELPER_CODE_SOURCE}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}"/>
        <DataGridTextColumn Binding="{Binding QUANTITY}" Header="Cantidad"/>
        <DataGridTextColumn Binding="{Binding REMAINING_CODES}" Header="Restantes"/>
        <DataGridTextColumn Binding="{Binding TRZ_ENDPOINT}" Header="TRZ IP"/>
        <DataGridTextColumn Binding="{Binding TRZ_ENDPORT}" Header="TRZ Puerto"/>
    </DataGrid.Columns>
</DataGrid>

MainViewModel:

public ObservableCollection<CODE_LEVEL_CONFIGURATION> LevelConfigs
{
    get { return m_LevelConfigs; }
    set
    {
        m_LevelConfigs = value;
        RaisePropertyChanged("LevelConfigs");
    }
}

CODE_LEVEL_CONFIGURATION:

public class CODE_LEVEL_CONFIGURATION
{
    public byte CODE_LEVEL { get; set; }
    public string LEVEL_NAME { get; set; }
    public bool IS_ACTIVE { get; set; }
    public byte CODE_TYPE { get; set; }
    public byte CODE_SOURCE { get; set; }
    public byte? HELPER_CODE_TYPE { get; set; }
    public byte? HELPER_CODE_SOURCE { get; set; }
    public int QUANTITY { get; set; }
    public int REMAINING_CODES { get; set; }
    public string TRZ_ENDPOINT { get; set; }
    public int? TRZ_ENDPORT { get; set; }
}

但是当我运行应用程序时,我在 DataGridComboBoxColumn 上看不到任何内容。

我不知道如何设置TextBinding属性。

CODE_LEVEL_CONFIGURATION.CODE_TYPE 值是一个 ID。我需要为每个可能的值显示一个描述性文本。而且,当我得到这个值时,我需要得到它的ID 来将它存储在数据库中。

我需要enum 或其他东西来获取每个CODE_TYPE 值的文本吗?

【问题讨论】:

    标签: c# wpf mvvm data-binding datagrid


    【解决方案1】:

    这是因为你没有设置组合框的ItemsSource。你应该这样做:

    <DataGridComboBoxColumn ItemsSource="{Binding Path=}" DisplayMemberPath="" SelectedItemBinding="{Binding Path=}"></DataGridComboBoxColumn>
    

    DisplayMemberPath 定义显示选中项的哪个属性

    使用SelectedItemBinding,您可以将所选项目绑定到视图模型中的属性。

    如果您只需要所选项目的特定值,请使用SelectedValueBindingSelectedValuePath

    【讨论】:

    • 感谢您的回答。 CODE_LEVEL_CONFIGURATION.CODE_TYPE 值是一个 ID。我需要为每个可能的值显示一个描述性文本。而且,当我得到这个值时,我需要得到它的ID 来将它存储在数据库中。
    • 据我了解您的问题,CODE_LEVEL_CONFIGURATION 的一个实例是一个数据网格行。您必须为组合框列的可能值提供附加列表。例如:CODE_TYPE 的可能值是多少?
    • 例如,“type_1”、“type_2”、“type_3”。
    • CODE_LEVEL_CONFIGURATION 中的CODE_TYPE 是一个字节。您需要创建某种从字符串到字节的映射。您可以创建具有 2 个属性的 Type 类:名称(字符串)和值(字节)。然后在包含所有可能类型的视图模型中创建一个列表。您将此列表绑定到 DataGridComboBoxColumn ItemsSource
    【解决方案2】:

    需要为ComboBox列设置itemssource,并绑定选择值路径,才能在combobox中查看选择值。

    <DataGridComboBoxColumn SelectedValuePath="{Binding CODE_TYPE}" ItemsSource="{Binding LevelConfigs}"/>
    

    【讨论】:

      【解决方案3】:

      是的,可以在 ComboBoxColumn 中使用 SelectedValuePath 和 DisplayMemberPath。例如,您可以尝试通过维护两个属性(ID 和描述)并为该类创建 itemssource。现在将该 ItemsSource 绑定到 ComboBoxColumn,将 SelectedValuePath 定义为 ID,将 DisplayMemberPath 定义为 Description,如下所示。

      <DataGridComboBoxColumn SelectedValuePath="{Binding ID}" DisplayMemberPath="{Binding Description}"   ItemsSource="{Binding SourceCollection}"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 2011-11-11
        • 1970-01-01
        相关资源
        最近更新 更多