代码之家  ›  专栏  ›  技术社区  ›  T. Webster

在窗口加载和连接更改后,是否将wpf toolkit datagrid组合框列绑定到linq to sql集合?

  •  0
  • T. Webster  · 技术社区  · 16 年前

    我是MVVM的初学者。主窗口使用WPF工具箱中的股票数据报。它有一个视图模型,并且只依赖.xaml.cs文件中的DataContext_Changed事件处理程序。主窗口的DataContext是视图模型。

    我正在尝试将DataGridComboxColumn的itemsSource属性绑定到视图模型上的CLR属性“FieldTypes”。fieldtypes”是从fieldtype类型的linq to sql表派生的列表。 数据报的itemssource来自一个system.data.linq.table,“fieldtypes”来自 分离 桌子,这两张桌子 没有关系 .

    要将FieldTypes DataGridComboxColumn绑定到视图模型上的“FieldTypes”属性,我创建了一个要在DataGridTemplateColumn中使用的DataTemplate静态资源:

        <DataTemplate x:Key='FieldTypeCombo' >
            <ComboBox DataContext='{Binding ElementName=window, Mode=OneWay, Path=DataContext, UpdateSourceTrigger=PropertyChanged}'
                      ItemsSource='{Binding FieldTypes}'
                      DisplayMemberPath='Name'
                      />
        </DataTemplate>
    

    结果发现这个数据模板 将 在主窗口的子元素上工作,而不是在DataGrid中,例如在HeaderedContentControl.ContentTemplate中,但将 不 在DataGridTemplateColumn.CellTemplate中工作。

    如果尝试将DataGridComboBoxColumn绑定到不在DataGrid中的常规ComboBox的ComboBox.itemsSource属性,

                            <c:DataGridComboBoxColumn Header="FieldType"                                                      
                                          ItemsSource="{Binding ElementName=regularcombobox, Path=ItemsSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"                    
                                          />
    

    它按预期工作,但不适用于DataGrid中的组合框。

    我希望对视图模型的属性进行尽可能多的数据绑定,但这看起来也是一个静态资源的机会。但是,在窗口加载之后,这个静态资源会发生变化,因为直到加载之后才知道连接字符串。即使在将ComboBox列的itemssource绑定到StaticResource时,我也没有遇到过这种情况,也没有遇到过DynamicResource。

    是否有某种方法可以使用MVVM将DataGrid组合框列绑定到独立于DataGrid的项源的集合?或者,有没有一种方法可以通过静态资源来实现这一点,即使SQL连接在窗口加载后发生了更改?

    1 回复  |  直到 16 年前
        1
  •  1
  •   John Bowen    16 年前

    尝试将elementname绑定替换为:

    {Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Mode=OneWay, Path=DataContext, UpdateSourceTrigger=PropertyChanged}'
    

    elementname只能解析特定范围内的名称,通常在数据模板内使用它们来引用外部的东西是不好的(尽管在某些情况下它会起作用)。