C# 从列表框中获取ObservableCollection

C# 从列表框中获取ObservableCollection,c#,wpf,data-binding,listbox,observablecollection,C#,Wpf,Data Binding,Listbox,Observablecollection,是否有一种方法可以通过编程从列表框确定关联的ObservableCollection 我将ItemsSource绑定到XAML中的一个列表框中,当用户从中选择一个项目时,我希望程序不仅能够找到该项目来自哪个列表框(我已经设法做到了),而且能够获得与其相关联的ObservableCollection 我认为通过使用sourceContainer.ItemsSource.ToString()(其中sourceContainer是通过编程找到的列表框),我将能够确定它背后的数据绑定Observable

是否有一种方法可以通过编程从列表框确定关联的ObservableCollection

我将ItemsSource绑定到XAML中的一个列表框中,当用户从中选择一个项目时,我希望程序不仅能够找到该项目来自哪个列表框(我已经设法做到了),而且能够获得与其相关联的ObservableCollection

我认为通过使用sourceContainer.ItemsSource.ToString()(其中sourceContainer是通过编程找到的列表框),我将能够确定它背后的数据绑定ObservableCollection。然而,事实并非如此。我错过了什么

谢谢

编辑:这里有一些代码与创建ObservableCollections以及如何确定选择哪个框有关。(我知道这可能不是最好的方法,我还在学习…)

首先,XAML(每个列表框都有这一行用于常规绑定):

现在,创建ObservableCollections的代码如下:

    private ObservableCollection<DataItem> listOneItems;

    public ObservableCollection<DataItem> ListOneItems
    {
        get
        {
            if (listOneItems == null)
            {
                listOneItems = new ObservableCollection<DataItem>();
            }
            return listOneItems;
        }
    }

如果还需要其他内容,请告诉我。

如果您直接绑定到属于
可观察集合的属性,您应该能够执行以下操作:

var col = (ObservableCollection<MyClass>)sourceContainer.ItemsSource;
var col=(ObservableCollection)sourceContainer.ItemsSource;

如果不是这样,您需要发布相关的XAML和代码。

与listbox关联的集合是ObservableCollection?因为如果你设置了一个数组,它不会在后台进行到ObservableCollection的神奇转换

告诉我你为什么需要这个逻辑。假设smth在其他逻辑中是错误的。

是正确的,您可以通过将
ItemsSource
属性强制转换为正确的集合类型来获取实际集合

ObservableCollection<DataItem> sourceCollection = 
    sourceContainer.ItemsSource as ObservableCollection<DataItem>;

我试过你的建议,但由于某种原因,它仍然不起作用。当这一行被点击时,它只是读取“Count=1”。我想让它读一下藏品的真实名称。如果我说的没有道理,请随时纠正我。数据绑定对我来说还是很陌生的。这听起来像是你得到了一个包含1项的列表(ObservableCollection)?你的名字是什么意思?您应该只关心集合的内容,而不关心集合的名称……这似乎是一个UI问题,与您的业务实现之间可能不应该存在某种耦合——假设您不太了解您需要什么。如果您订阅了更改的listbox选择,则可以从sender对象获取listbox。var listbox=(listbox)发送方;然后获取listbox.ItemsSource以获取相关的收藏感谢您的清理工作;我现在明白了为什么人们不特别关心ObservableCollection的名称,因为它在名称之外还有更多有用的函数。我希望我能把这两个问题都列为最佳答案@NateFrueh我想知道你到底想要什么
名称
属性:)
var col = (ObservableCollection<MyClass>)sourceContainer.ItemsSource;
ObservableCollection<DataItem> sourceCollection = 
    sourceContainer.ItemsSource as ObservableCollection<DataItem>;
var binding = soureContainer.GetBindingExpression(ListBox.ItemsSourceProperty);
var sourceCollectionName = binding.ParentBinding.Path.Path;