У меня есть следующая проблема с 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
.
Что мне делать?