繁体   English   中英

WPF MVVM DataGrid ComboboxColumnColumn绑定到我的模型中的列表

[英]WPF MVVM DataGrid ComboboxColumn binding to List in my Model

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

我有一个绑定到这样的模型的ObservableCollectionDataGrid

 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 DataGrid的任何东西。

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

如果使用DataGridComboBoxColumn,则必须使用静态资源来填充ItemsSource,这在“备注”部分中进行了说明:https://docs.microsoft.com/zh-cn/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>                    

你尝试了什么? 假设DataGridItemsSource属性已设置或绑定到IEnumerable<Model> ,则此方法应该起作用:

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

请参考这篇 TechNet文章以获取更多建议。

暂无
暂无

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

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