繁体   English   中英

从 Combobox 中获取选定的值到 WPF 中的 Datagrid

[英]Get selected value from Combobox to Datagrid in WPF

我的代码中有以下 ViewModel:

public List<Product> ProList { set; get;} = new List<Product>
{
 new Product
 {
   Num = 1,
   CName = "AAA",
   CAdd = "Maple",
   CPh = 012345
 },
 new Product
 {
   Num = 2,
   CName = "BBB",
   CAdd = "Moon",
   CPh = 012345
 },
 new Product
 {
   Num = 3,
   CName = "CCC",
   CAdd = "River",
   CPh = 012345
 }
};

这就是我将数据绑定到Combobox中的 Combobox 的方式。

<Combobox Name="MyComboBox" IsEditable="True" Text="Select" ItemsSource="{Binding ProList}" DisplayMemberPath="CName" SelectedValue="CName"/>

我想在Datagrid中显示Combobox选定值
它应该看起来像这样:

AAA

No    Name     Address  Ph No

1     AAA      Maple    012345

如果您在 ViewModel 中添加“SelectedProduct”属性并将文本块绑定到该属性。 文本框将显示来自所选产品的数据。

视图模型

class MyViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private Product _selectedProduct;

    public Product SelectedProduct
    {
        get { return _selectedProduct; }
        set 
        {
            _selectedProduct = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedProduct)));
        }
    }
    public ObservableCollection<Product> ProList { get; } = new ObservableCollection<Product>
    {
        new Product
     {
       Num = 1,
...

将 ComboBox XAML 更改为 select 当前项到 SelectedProduct 属性。 然后将 TextBlocks 绑定到选定的产品属性。

        <ComboBox Name="MyComboBox" IsEditable="True" Text="Select" ItemsSource="{Binding ProList}" DisplayMemberPath="CName"
                  SelectedItem="{Binding SelectedProduct}"/>
        <TextBlock Text="{Binding SelectedProduct.CName}"/>

我猜你已经在 MainWindow 中有 ViewModel 作为 DataContext。

PropertyChanged 事件触发绑定以更新文本块。


编辑:数据网格

DataGrid 想要一个集合作为源。 您可以在获取所选产品的视图 model 中添加一个集合,然后将 DataGrid 绑定到该集合。

在 ViewModel class 中:

    public ObservableCollection<Product> SelectedProducts { get; } = new ObservableCollection<Product>();

在 SelectedProduct 属性中添加选定的产品:

    public Product SelectedProduct
    {
        get { return _selectedProduct; }
        set 
        {
            _selectedProduct = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedProduct)));
            SelectedProducts.Clear();
            SelectedProducts.Add(value);
        }
    }

在 XAML 中添加 DataGrid

        <DataGrid ItemsSource="{Binding SelectedProducts}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM