带有数据绑定的WPF Datagrid,更改ItemsSource

时间:2013-08-01 11:41:48

标签: wpf vb.net data-binding datacontext itemssource

我在WPF中有一个显示一些数据网格的数据网格。从ViewModel检索数据,其中包含以下属性:

Public ReadOnly Property Devices() As List(Of Device)
    Get
        Return FDevices
    End Get

Public ReadOnly Property ClientNetworks() As List(Of network)
    Get
        Return fnetwork
    End Get
End Property

构建视图模型后,两个属性都填充了数据。 要使用Datagrid中的属性,请使用以下XAML。

<DataGrid  ItemsSource="{Binding Devices}" AutoGenerateColumns="False" >
        <DataGrid.Columns>
            <DataGridTemplateColumn Header="Customer" >
                <DataGridTemplateColumn.CellTemplate >
                    <DataTemplate>
 ------------------   <TextBlock Text="{Binding ClientNetwork.Description}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
 ------------------>  <ComboBox ItemsSource="{Binding ClientNetwork}" DisplayMemberPath="Description"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
</DataGrid>

这应该显示带有描述的文本框和编辑时带字符串的组合框。

在Datagrid之外,组合框工作正常。我知道这是因为Datagrid上设置了ItemsSource,但我似乎无法找到如何使其工作。我已经尝试了几个组合框代码的改动,但到目前为止还没有。

目标是让用户能够编辑单元格并显示一个组合框,从中可以选择一个字符串,然后相应的int将保存在数据库中。

更新1

<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}},Path=DataContext.ClientNetworks}"
                                  DisplayMemberPath="Description"
                                  SelectedItem="{Binding ClientNetwork}"
                                  />

这就是我如何修复datacontext的休息

1 个答案:

答案 0 :(得分:0)

我找到了一种方法来完成它,但我不确定这是应该做的方式

<Window.Resources>
    <CollectionViewSource Source="{Binding ClientNetworks}" x:Key="clientnetworks" />
</Window.Resources>

并在组合框中

<ComboBox ItemsSource="{Binding Source={StaticResource clientnetworks}}" DisplayMemberPath="Description" />