динамическое связывание столбца DataGridComboBox - PullRequest
0 голосов
/ 21 февраля 2019

В настоящее время я занимаюсь разработкой небольшого wpf-компонента, но уже 2 дня я борюсь со странной проблемой внутри DataGrid.Я пытаюсь перезагрузить ItemSource DataGridComboBoxColumn.Невозможно связать этот столбец в xaml с ObservableList

My .xaml:

<DataGrid Grid.Row="3" Height="auto" Margin="0, 15, 0, 0"  x:Name="mapAttributesTable" ColumnWidth="Auto"
              SelectedIndex="0" ItemsSource="{Binding LinkedItems, Mode=TwoWay}" SelectedItem ="{Binding Path=CurrentColumnObject, Mode=TwoWay}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridComboBoxColumn x:Name="comboBox_TableFields" Header="TableFields" ItemsSource="{Binding Path=DataContext.Fields, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}">
                <DataGridComboBoxColumn.EditingElementStyle>
                    <Style TargetType="{x:Type ComboBox}">
                        <EventSetter Event="SelectionChanged" Handler="ComboBoxColumn_SelectionChanged"/>
                        <Setter Property="IsEditable" Value="True" />
                    </Style>
                </DataGridComboBoxColumn.EditingElementStyle>
            </DataGridComboBoxColumn>
            <DataGridTextColumn Header="JmsSubClass" Binding="{Binding Path= JmsSubClass}"/>
            <DataGridTextColumn Header="JmsFieldName" Binding="{Binding Path=JmsFieldName}"/>
        </DataGrid.Columns>
    </DataGrid>

Мой код:

    public IMap SelectedItem
    {
        get { return _selectedItem; }
        set
        {
            if (value != null)
            {
                _selectedItem = value;
                this.Items = new ObservableCollection<ILink>(SelectedItem.Links);
                OnPropertyChanged();
                this.Fields = new ObservableCollection<string>(SelectedDataMapItem.TableFields);
                OnPropertyChanged("Fields");
            }
        }
    }

    private ObservableCollection<ILink> _items = new ObservableCollection<ILink>();

    /// <summary>
    /// Holds each created entry
    /// </summary>
    public ObservableCollection<ILink> Items
    {
        get { return this._items; }
        set
        {
            if (value != null)
            {
                this._items= value;
            }
        }
    }

    /// <summary>
    /// 
    /// </summary>
    private ILink _currentColumnObject;

    /// <summary>
    /// 
    /// </summary>
    public ILink CurrentColumnObject
    {
        get { return _currentColumnObject; }
        set
        {
            if (value != null)
            {
                this._currentColumnObject = value;
                OnPropertyChanged();
            }
        }
    }

    private ObservableCollection<string> _fields = new ObservableCollection<string>();

    public ObservableCollection<string> Fields
    {
        get
        {
            return _fields;
        }
        set
        {
            if (value != null)
            {
                this._fields = value;
            }
        }
    }

Если кто-либо (разработчик)) есть идея, будет неплохо решить эту проблему.

с наилучшими пожеланиями

...