好的,我有一个包含多行的listview,它是通过在代码中设置itemsource来定义的。在生成的每一行中,我都有一个组合框。在代码中,我有另一个对象数组,它是这个组合框应该显示的集合。
我基本上想要它,以便每行可以从列表中选择一个选项。可能性列表将始终相同,因此数组。
一些代码可以提供帮助。这就是我对XAML的看法:
<ListView Name="lvVanList">
<ListView.View>
<GridView>
<DisplayMemberBinding="{Binding Path=Number}">Van</GridViewColumn>
<GridViewColumn Header="Rooms">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ComboBox Name="cbSchemeList" ItemsSource="{Binding Path=_RoomList}" SelectedValue="{Binding Path=Room}" DisplayMemberPath="Name" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
背后的代码:
private RoomList _RoomList;
public populateList()
{
this.lvVanList.ItemsSource = this.getVans;
this._RoomList = this.getRooms;
}
private class Room
{
string Name { get; set; }
int Windows { get; set; }
}
不幸的是,当组合框打开时,这会显示一个空白列表。
我确实通过将可能性列表存储在绑定到每一行的对象中来解决这个问题,但我确信我应该只能使用一个集合。
很难描述如果有任何我错过的信息或者不可理解的信息请告诉我。
提前致谢
答案 0 :(得分:1)
问题是绑定路径(_RoomList
)是相对于ListView的每个条目的DataContext
。 DataContext
是显示的项目,而不是您的视图。
您可以通过多种方式解决此问题:
ElementName
答案 1 :(得分:0)
我的猜测是DataContext
的每一行的ListView
将成为ListView
的那一行所绑定的项目。因此,当绑定到_RoomList
属性时,它会尝试绑定到每个项目上的属性。
相反,您需要将_RoomList
绑定指向包含该属性的元素。例如,如果它位于MainWindow
中,您可以将属性x:Name="This"
添加到MainWindow
,然后将绑定更改为ItemsSource={Binding ElementName=This, Path=_RoomList}
。
如何处理它的一个例子是(使用代码的修改版本):
<Window x:Class="ComboBoxListViewBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="This"
Title="MainWindow" Height="350" Width="525" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<ListView Name="lvVanList">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=Number}">Van</GridViewColumn>
<GridViewColumn Header="Rooms">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ComboBox Name="cbSchemeList" ItemsSource="{Binding Path=RoomList}" SelectedValue="{Binding Path=Room}" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
<TextBlock Text="Testing" />
<TextBlock Text="Testing" />
<TextBlock Text="Testing" />
</ListView>
</Grid>
</Window>
答案 2 :(得分:0)
试试这个
<ComboBox Name="cbSchemeList" ItemsSource="{Binding RelativeSource={RelativeSource
FindAncestor, AncestorType={x:Type ViewModel}},
Path=RoomList }" SelectedValue="{Binding Path=Room}" />
此处ViewModel
包含您的RoomList
属性