我对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}"/>
一旦用户输入连接字符串,就会在ViewModel中生成列表ADAttributes
,因此它在运行时生成。
视图模型:
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>();
}
现在是用户提供SQL-Server登录数据时更新ObservableCollection
的方法:
public void IsConnected(object value)
{
this.ADAttributes = GetADEntryFromDB(dbName);
}
当列表是静态的并且定义的静态资源一切正常时。
完整代码是这样的:
代码behinde的静态情况工作得很好:
this.vm = new MainWindowVM();
this.DataContext = this.vm;
this.Resources.Add("ADAttributes", this.vm.ADAttributes)
this.Resources.Add("DataAttributes", this.vm.DataAttributes)
我无法在运行时修改静态资源,但ComboBox
标记中的列表不可用,但它们不在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
。
我该怎么办?