0

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

我的代码:

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>

如果我只是放置一个带有“{Binding Name}”的文本块而不是我的第二个 ListView,它就可以工作。不知道如何绑定这个内部 ListView,有什么想法吗?

谢谢,

4

2 回答 2

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; }

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

于 2012-06-04T21:05:22.447 回答
0

请注意,这MyText是公共财产,MyList必须是公共财产。

于 2012-06-04T21:06:44.520 回答