【问题标题】:Set DisplayMemberPath of ListBox that is bound to an ObservableCollection of ObservableCollection设置绑定到 ObservableCollection 的 ObservableCollection 的 ListBox 的 DisplayMemberPath
【发布时间】:2017-09-27 21:14:05
【问题描述】:

如何设置绑定到ObservableCollection 的ObservableCollection 的ListBox 的DisplayMemberPath?一切正常。 ListBox 在其中正确显示 ObservableCollection。当用户在ListBox 中选择一个时,ObservableCollection 的数据将显示到DataGrid。唯一的问题是 ListBox 为每个 ObservableCollection 显示 (collection)(不是描述性的)。我想我需要在里面放一个转换器,我这样做了;

<ListBox ItemsSource="{Binding Path=MyCollection}" 
DisplayMemberPath="{Binding Converter={StaticResource CollectionConverter}}" />

然后有一个像这样的标准转换器;

public class CollectionConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //Convert Logic
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //ConvertBack logic
    }
}

问题是Convert 和ConvertBack 永远不会触发。

我做错了什么?

【问题讨论】:

  • 为什么不将其提炼成一个独立的示例,您可以在此处展示该示例,其中包含演示问题的实际数据和绑定。
  • 为什么要绑定到 ObservableCollection 集合? ListBox 应该显示什么?
  • ObservableCollection 没有任何“描述性”。

标签: c# wpf listbox


【解决方案1】:

像这样重构第一个集合:

class NamedObservableCollection : ObservableCollection<ObservableCollection<MyItem>> 
{  
    public string Name { get; private set;}

    public NamedObservableCollection(string name)
    {
        Name = name;
    }
}

<ListBox ItemsSource="{Binding Path=MyCollection}" DisplayMemberPath="Name"}/>

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 2012-12-16
    • 2011-06-05
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多