将控件绑定到可观察集合列表中的特定项目

时间:2018-08-23 17:22:19

标签: c# wpf data-binding

我有一个场景,其中有多个数据列表,这些数据列表是通过循环方式以编程方式构造的。我想在用户界面上并排显示这些列表。

我设置了一个包含字符串的ObservableCollections列表。我正在使用ListBox绑定到列表的方式,如下所示:Bind textbox list inside listbox in wpf 与此XMAL:

<ListBox Name="ListTwo" ItemsSource="{Binding Source=obs}" ... >
<ListBox.ItemTemplate>
    <DataTemplate>
        <TextBox Name="TextBoxList" Text="{Binding}" />
    </DataTemplate>
</ListBox.ItemTemplate>

问题是如何将特定列表框绑定到列表中的特定索引?具体来说,我希望第0个列表绑定到List [0],第1个列表绑定到List [1],等等。


因此采纳了以下建议,并尝试将其归类。这就是我得到的,但是UI没有显示更新。

XAML:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    x:Class="NS.ClassMainWindow"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Window.Resources>

<ListView Grid.Row="1" Grid.Column="0" x:Name="RawBox" ItemsSource="{Binding Foo.Raw}" Background="LightGray" BorderThickness="2" BorderBrush="Black">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBox Name="RawItemsTextBoxList" Text="{Binding}"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

DataClass:

public class FooClass 
{
    public List<ObservableCollection<string>> items;
    public ObservableCollection<string> Raw { get => this.items[0]; set => this.items[0] = value; }
    public ObservableCollection<string> Tier1 { get => this.items[1]; set => this.items[1] = value; }
    public ObservableCollection<string> Tier2 { get => this.items[2]; set => this.items[2] = value; }
    public ObservableCollection<string> Tier3 { get => this.items[3]; set => this.items[3] = value; }
    public ObservableCollection<string> Tier4 { get => this.items[4]; set => this.items[4] = value; }

    public FooClass()
    {
        this.items = new List<ObservableCollection<string>>();
        for (int i = 0; i <= 4; i++)
        {
            this.items.Add(new ObservableCollection<string>());
        }
    }

}

和分配:

this.Foo.Raw = new ObservableCollection<string>(itemNames); // itemNames is a List<string>

我很明显很想念某些东西,但是我一生都看不到。对WPF来说还算是新手,所以这可能是菜鸟。

1 个答案:

答案 0 :(得分:0)

如果您将DataContext设置为FooClass的实例,然后将Raw属性设置为非空集合,如下所示:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var foo = new FooClass();
        foo.Raw = new ObservableCollection<string>(new List<string> { "1", "2", "3" });
        DataContext = foo;
    }
}

...您应该看到提供绑定到Raw属性的字符串,并将Mode的{​​{1}}设置为TextBox或{{1} }:

OneTime