在WPF中如何绑定父控件的itemssource中的集合

时间:2010-06-24 15:08:17

标签: wpf data-binding datatemplate

我是WPF的新手,所以这可能比看起来更容易。我有一个DataTable对象,我将其设置为组合框的项目源。对于DataTable中的每一行,我想要一个ComboBoxItem。对于每个ComboBoxItem,我想为每个列名创建一个标签,并为该列的当前行中的相应值创建一个文本框。我尝试的任何东西似乎都没有用,但是我在XAML的数据模板中开枪了。

<Grid x:Name="LayoutRoot" Background="White" Height="107" Width="358">
    <ComboBox Name="pCombo" ItemsSource="myTable">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <StackPanel DataContext="{Binding pCombo.ItemsSource.Columns}">
                    <TextBlock Text="{Binding ColumnName}"></TextBlock>
                </StackPanel>
                <StackPanel DataContext="{Binding pCombo.ItemsSource.Rows}">
                    <TextBox Text="{Binding RowValue}"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
    </ComboBox>
</Grid>

我知道我的所有绑定都是错误的我只是无法弄清楚应该在哪里。感谢任何帮助我的人。

1 个答案:

答案 0 :(得分:0)

XAML:

<ListView ItemsSource="{Binding Path=Tbl}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ComboBox ItemsSource="{Binding}">
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <Label Content="{Binding Path=Key}"></Label>
                                <Label Content="{Binding Path=Value}"></Label>
                            </StackPanel>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

代码背后:

private object tbl = new[]
    {
    new[] {
              new KeyValuePair<string, string>("col1", "val1"), new KeyValuePair<string, string>("col2", "val1")
          },
    new[] {
              new KeyValuePair<string, string>("col1", "val2"), new KeyValuePair<string, string>("col2", "val2")
          },
    new[] {
              new KeyValuePair<string, string>("col1", "val3"), new KeyValuePair<string, string>("col2", "val3")
          }
    };

    public object Tbl { get { return tbl; } set { tbl = value; } }

不要忘记设置DataContext(即在窗口的.ctor中),如下所示:

DataContext = this;

我希望你能理解这背后的想法!