将动态列表绑定到comboBox

时间:2018-06-05 12:37:53

标签: c# wpf xaml

我对wpf有以下问题。 我有一个类Row,它有多个属性,来自两类DataEntryADEntry。 用户可以在DataEntryADEntry项目之间进行交互,这意味着创建一行或更多行,然后保存其配置或加载它。 数据应来自数据库。

我创建了一个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

我该怎么办?

0 个答案:

没有答案