WPF MVVM DataGrid ComboboxColumn привязка к списку в моей модели - PullRequest
0 голосов
/ 02 июня 2019

В настоящее время я работаю над проектом WPF с MVVM.

У меня есть 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 в моей модели?

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Если вы используете 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>                    
0 голосов
/ 03 июня 2019

Что вы пробовали? При условии, что свойство DataGrid ItemsSource установлено или привязано к IEnumerable<Model>, это должно работать:

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

Пожалуйста, обратитесь к этой статье TechNet для получения дополнительных предложений.

...