Привязка динамического списка к comboBox - PullRequest
0 голосов
/ 05 июня 2018

У меня есть следующая проблема с wpf.У меня есть класс Row, который имеет несколько атрибутов из классов двух типов DataEntry и ADEntry.пользователь может отображать между DataEntry и ADEntry элементами, что означает создание строки или более, и сохранять свою конфигурацию или загружать ее затем.данные должны поступать из базы данных.

Я создал Grid следующим образом:

<DataGrid x:Name="fieldGrid" ItemsSource="{Binding rows}" AutoGenerateColumns="False">

в Grid есть DataTemplate, в нем мой combobox:

<ComboBox ItemsSource="{Binding ADAttributes}" SelectedValue="{Binding Path=Entry.ADEntryName, Mode=TwoWay}"/>

список ADAttributes создается в ViewModel, как только пользователь вводит строку подключения, поэтому он генерируется во время выполнения.

ViewModel:

 public class MainWindowVM : _NotifyPropertyChanged
{

  private ObservableCollection<ADEntry> aDAttributes;
    public ObservableCollection<ADEntry> ADAttributes
    {
        get
        {

            return this.aDAttributes;
        }
        set
        {
            if (value != this.aDAttributes)
            {
                this.aDAttributes = value;
                this.NotifyPropertyChanged(nameof(MainWindowVM.ADAttributes));
            }
        }
    }

 MainWindowVM()
 {
     ADAttributes = new ObservableCollection<ADEntry>();
 }

Теперь метод, который обновляет ObservableCollection, когда пользователь предоставил данные для входа в SQL-Server:

 public void IsConnected(object value)
    {
       this.ADAttributes = GetADEntryFromDB(dbName);  
    }   

Когда список был статическим и определен как статический ресурс, все работало нормально.

полный код такой:

Код для статического случая, который работал нормально:

this.vm = new MainWindowVM();
this.DataContext = this.vm;
this.Resources.Add("ADAttributes", this.vm.ADAttributes)
this.Resources.Add("DataAttributes", this.vm.DataAttributes)

Я не могу изменить статические ресурсы во время выполнения, и списки недоступны в ComboBox Tag, но они находятся за пределами Grid доступны.Я имею в виду, когда я копирую тот же ComboBox за пределы сетки, я получаю данные, например:

     <StackPanel>
              <ComboBox ItemsSource="{Binding ADAttributes}"></ComboBox>
              <DataGrid x:Name="fieldGrid" ItemsSource="{Binding Fields}" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTemplateColumn >
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding ADAttributes}" SelectedValue="{Binding Path=Entry.ADEntryName, Mode=TwoWay}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox  ItemsSource="{Binding DataAttributes}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
             </DataGrid>
</StackPanel>

В первом ComboBox все в порядке!

Я имею в виду, что проблема заключается вПривязка к DataGrid, которая делает списки невидимыми.

Списки имеют тип ObsevableCollection.

Что мне делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...