在WPF中绑定嵌套的ListView

时间:2012-06-04 20:27:25

标签: wpf listview binding nested

我有一个简单的ListView,其中有另一个ListView。我似乎无法将内部列表视图与我的实际List<>绑定,它只显示为空。

我的代码:

public CollectionViewSource CVSmain {get;set;} //Which is actually a List<MyClassViewModel>, my main ListView bounds to this correctly

public class MyClassViewModel{

    public class MySubClass{
          public string Name{return _name;}
    }

    List<MySubClass> MyList = new List<MySubClass>();
    public string MyText{get;set;}
}

我的XAML:

<ListView DataContext="{Binding CVSmain}" ItemsSource="{Binding}" >
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding MyText}" Header="My Text"/>
                <GridViewColumn Header="My List">
                <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ItemsControl ItemsSource="{Binding MyList}">
                                <ItemsControl.Template>
                                    <ControlTemplate TargetType="ItemsControl">
                                        <ItemsPresenter/>
                                    </ControlTemplate>
                                </ItemsControl.Template>
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <StackPanel/>
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <ListView>
                                            <ListView.View>
                                                <GridView>
                                                    <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name"/>                                                  </GridView>
                                            </ListView.View>
                                        </ListView>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>

如果不是我的第二个ListView,我只是放了一个带有“{Binding Name}”的Textblock,它就可以了。不知道如何绑定这个内部ListView,任何想法?

谢谢,

2 个答案:

答案 0 :(得分:1)

你有三个嵌套控件:外部ListView,中间的ItemsControl,然后是内部ListView。我认为ItemsControl是不必要的。尝试替换

 <ItemsControl ItemsSource="{Binding MyList}"> 
  ...
 </ItemsControl>

通过

 <ListView ItemsSource="{Binding MyList}"> 
     <ListView.View>  
        <GridView>  
            <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name"/> 
        </GridView>  
     </ListView.View> 
 </ListView>

此外,改变

List<MySubClass> MyList = new List<MySubClass>(); 

public List<MySubClass> MyList { get; set; }

因为您只能绑定到公共属性,而不能绑定到私有字段。

答案 1 :(得分:0)

请注意MyText是公共财产,MyList需要是公共财产。