WPF,绑定以编程方式列出一个Observable列表集

时间:2016-11-30 10:34:19

标签: c# wpf xaml datagrid

我有一个ObservableCollection<List<MessageView>>(MessageView是一个自定义类)我以这种方式实例化

public ObservableCollection<List<MessageView>> _messagesView;
public ObservableCollection<List<MessageView>> messagesView {
    get {
        if (_messagesView == null) {
            _messagesView = new ObservableCollection<List<MessageView>>();
        }
        return _messagesView;
    }
    set {
        if (_messagesView != value) {
            _messagesView = value;
            PropertyChanged(this, new PropertyChangedEventArgs(nameof(messagesView)));
        }
    }
}

此属性在Singleton

上设置

我想将一个项集合绑定到一个数据网格,它会在xaml中看起来那样:

<xmlns:module="clr-namespace:Myproject.MyNameSpace;assembly=Myproject">
<DataGrid 
    Name="DataGrid_messages"
    ...
    ItemsSource="{Binding messagesView[2], Source={x:Static module:Singleton.Instance}}"
>

这样做很好但这不是我想做的。我希望控制我的索引。所以我必须在c#中使用我的控制器进行绑定,但是我从未找到过与特殊索引绑定的示例。

Binding myBinding = new Binding("messagesView");
myBinding.Source = Singleton.Instance;
myBinding.Path = ??
DataGrid_messages.SetBinding(DataGrid.ItemsSourceProperty, myBinding);

分享你对此的想法,有可能吗?或者更好的方法呢?

更新

与Clemens答案的其他改动:

使用内部列表设置绑定,因此它应该是ObservableCollection类型:

public List<ObservableCollection<MessageView>> messagesView;

1 个答案:

答案 0 :(得分:2)

如果索引是固定的,在后面的代码中创建绑定路径可能如下所示:

myBinding.Path = new PropertyPath(string.Format("messagesView[{0}]", index));