Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么ComboBox.ItemsSource引用ListCollectionView会更改ComboBox.SelectedItem的行为?_C#_Wpf_Xaml_Combobox_Listcollectionview - Fatal编程技术网

C# 为什么ComboBox.ItemsSource引用ListCollectionView会更改ComboBox.SelectedItem的行为?

C# 为什么ComboBox.ItemsSource引用ListCollectionView会更改ComboBox.SelectedItem的行为?,c#,wpf,xaml,combobox,listcollectionview,C#,Wpf,Xaml,Combobox,Listcollectionview,假设我有3个组合框控件。每个ItemsSource引用相同的产品主列表。每个SelectedItem引用另一个选定产品列表的单独数组索引。这一切都很好,程序按预期运行 现在假设我想过滤产品的主列表(例如,仅包含特定字符串“berry”的产品)。将ItemsSource从Products更改为ProductsView会导致两件事: 组合框确实经过了适当的过滤 每当进行选择时,所有组合框都设置为最后一个选择 这是密码。尝试在ItemsSource=“{Binding Path=ProductsVie

假设我有3个组合框控件。每个
ItemsSource
引用相同的产品主列表。每个
SelectedItem
引用另一个选定产品列表的单独数组索引。这一切都很好,程序按预期运行

现在假设我想过滤产品的主列表(例如,仅包含特定字符串“berry”的产品)。将ItemsSource从Products更改为ProductsView会导致两件事:

  • 组合框确实经过了适当的过滤
  • 每当进行选择时,所有组合框都设置为最后一个选择
  • 这是密码。尝试在
    ItemsSource=“{Binding Path=ProductsView}”和
    ItemsSource=“{Binding Path=Products}”之间切换

    MainWindow.xaml:

    <Window x:Class="WpfApplication2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <StackPanel>
            <ComboBox ItemsSource="{Binding Path=ProductsView}" SelectedItem="{Binding Path=SelectedProducts[0]}" />
            <ComboBox ItemsSource="{Binding Path=ProductsView}" SelectedItem="{Binding Path=SelectedProducts[1]}" />
            <ComboBox ItemsSource="{Binding Path=ProductsView}" SelectedItem="{Binding Path=SelectedProducts[2]}" />
        </StackPanel>
    </Window>
    
    
    
    MainWindow.xaml.cs:

    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Windows;
    using System.Windows.Data;
    
    namespace WpfApplication2
    {
        public partial class MainWindow : Window
        {
            public List<Product> Products { get; set; }
            public ListCollectionView ProductsView { get; set; }
            public ObservableCollection<Product> SelectedProducts { get; set; }
    
            public MainWindow()
            {
                Products = new List<Product>();
                Products.Add(new Product { Name = "Apple" });
                Products.Add(new Product { Name = "Orange" });
                Products.Add(new Product { Name = "Banana" });
                Products.Add(new Product { Name = "Pear" });
                Products.Add(new Product { Name = "Strawberry" });
                Products.Add(new Product { Name = "Raspberry" });
    
                ProductsView = new ListCollectionView(Products);
                ProductsView.Filter = (x) => (x as Product).Name.Contains("berry");
    
                SelectedProducts = new ObservableCollection<Product>();
                SelectedProducts.Add(null);
                SelectedProducts.Add(null);
                SelectedProducts.Add(null);
    
                InitializeComponent();
                DataContext = this;
            }
        }
    
        public class Product
        {
            public string Name { get; set; }
    
            public override string ToString()
            {
                return Name;
            }
        }
    }
    
    使用System.Collections.Generic;
    使用System.Collections.ObjectModel;
    使用System.Windows;
    使用System.Windows.Data;
    命名空间WpfApplication2
    {
    公共部分类主窗口:窗口
    {
    公共列表产品{get;set;}
    公共ListCollectionView产品视图{get;set;}
    公共ObservableCollection SelectedProducts{get;set;}
    公共主窗口()
    {
    产品=新列表();
    添加(新产品{Name=“Apple”});
    添加(新产品{Name=“Orange”});
    添加(新产品{Name=“Banana”});
    添加(新产品{Name=“Pear”});
    添加(新产品{Name=“草莓”});
    添加(新产品{Name=“Raspberry”});
    ProductsView=新列表集合视图(产品);
    ProductsView.Filter=(x)=>(x作为产品).Name.Contains(“berry”);
    SelectedProducts=新的ObservableCollection();
    SelectedProducts.Add(空);
    SelectedProducts.Add(空);
    SelectedProducts.Add(空);
    初始化组件();
    DataContext=this;
    }
    }
    公共类产品
    {
    公共字符串名称{get;set;}
    公共重写字符串ToString()
    {
    返回名称;
    }
    }
    }
    
    使用视图时,SelectedItem与CurrentItem同步。要抑制同步集属性,请执行以下操作:

    IsSynchronizedWithCurrentItem="False"
    

    在组合框上。

    使用视图时,SelectedItem与CurrentItem同步。要抑制同步集属性,请执行以下操作:

    IsSynchronizedWithCurrentItem="False"
    

    在组合框上。

    使用视图时,SelectedItem与CurrentItem同步。要抑制同步集属性,请执行以下操作:

    IsSynchronizedWithCurrentItem="False"
    

    在组合框上。

    使用视图时,SelectedItem与CurrentItem同步。要抑制同步集属性,请执行以下操作:

    IsSynchronizedWithCurrentItem="False"
    
    在组合框上