WPF DataGrid ComboBox绑定到ViewModel中的集合和选择

时间:2016-01-16 20:49:30

标签: c# wpf xaml mvvm binding

我有一个基本的MVVM WPF应用程序,它在DataGrid中显示了一堆与用户相关的信息。我有两个类(我简化了类,并没有在我的实际应用程序中实现INotifyPropertyChanged

public class Address
{
    public String StreetName { get; set; }
}

public class Person
{
    public String Name { get; set; }
    public String Street { get; set; }
}

我的ViewModel包含两个ObservableCollections

ObservableCollection<Person>
ObservableCollection<Address>

我将ViewModel绑定到Window,它显示了人员集合。但现在我想要,地址为ComboBox,以便用户只能从上面的地址集合中选择值。像查找表一样。

这是我的XAML代码。我管理,这是显示地址集合,但它不会显示我作为初始记录的人员集合的实际记录。

            <DataGridTextColumn Header="Name" Binding="{Binding Name}"></DataGridTextColumn>
            <DataGridTextColumn Header="Street" Binding="{Binding Street}"></DataGridTextColumn>

            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox ItemsSource="{Binding DataContext.addresses, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" DisplayMemberPath="StreetName">
                        </ComboBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

ComboBox

1 个答案:

答案 0 :(得分:1)

SelectedItemSelectedValue属性(取决于您实际绑定的内容)设置为地址。因此,如果您存储街道名称,那么您将拥有:

<DataTemplate>
    <ComboBox ItemsSource="..."
              DisplayMemberPath="StreetName"
              SelectedValuePath="StreetName"
              SelectedValue="{Binding Street}"/>
</DataTemplate>