【问题标题】:WPF MVVM DataGrid ComboboxColumn binding to List in my ModelWPF MVVM DataGrid ComboboxColumn 绑定到我的模型中的列表
【发布时间】:2019-06-02 14:45:56
【问题描述】:

我目前正在使用 MVVM 进行 WPF 项目。

我有一个DataGrid 绑定到一个ObservableCollection 的模型,如下所示:

 class Model : INotifyPropertyChanged
{

    private string m_Name;
    public string Name
    {
        get
        {
            return m_Name;
        }
        set
        {
            m_Name = value;
            OnPropertyChanged("Name");
        }
    }

    private List<string> m_Names;
    public List<string> Names
    {
        get
        {
            return m_Names;
        }
        set
        {
            m_Names = value;
            OnPropertyChanged("Names");
        }
    }

    private double? m_Value;
    public double? Value
    {
        get
        {
            return m_Value;
        }
        set
        {
            m_Value = value;
            OnPropertyChanged("Value");
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

现在我想使用DataGridComboBoxColumn 来创建一个组合框,其中我的属性“名称”作为 SelectedItem,名称作为 ItemSource。

我的每个模型都有自己的一组名称,这些名称与任何其他模型的名称都不相同。

我用谷歌搜索并查看了 StackOverflow,但没有找到任何解决方案。我也尝试过应用过滤器,就像我知道 DevExpress Grid Controls 可以做的那样,但我没有找到任何基本 WPF DataGrids 的东西。

如何将我的 DataGridComboBoxColumn 绑定到模型中的属性 List

【问题讨论】:

    标签: c# wpf datagrid datagridcomboboxcolumn


    【解决方案1】:

    如果您使用 DataGridComboBoxColumn,您必须为 ItemsSource 提供静态资源,这在“备注”部分中有说明 https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.datagridcomboboxcolumn?view=netframework-4.8

    因为每个视图模型都有不同的“名称”,所以可以使用 DataGridTemplateColumn 而不是 DataGridComboBoxColumn

                <DataGridTemplateColumn Header="Name">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Names}">
                                <ComboBox.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding}"/>
                                    </DataTemplate>
                                </ComboBox.ItemTemplate>
                            </ComboBox>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>                    
    

    【讨论】:

    • 谢谢。这就是我一直在寻找的。​​span>
    【解决方案2】:

    你尝试了什么?如果DataGridItemsSource 属性设置或绑定到IEnumerable&lt;Model&gt;,这应该可以工作:

    <DataGridComboBoxColumn ItemsSource="{Binding Names}" SelectedItemBinding="{Binding Name}" />
    

    更多建议请参考thisTechNet 文章。

    【讨论】:

      猜你喜欢
      • 2021-03-18
      • 2014-08-23
      • 2018-12-28
      • 2016-08-28
      • 2011-07-21
      • 2023-03-07
      • 2012-08-17
      • 2018-10-26
      • 2018-02-07
      相关资源
      最近更新 更多