这样的事情:
public class EffectViewModel
{
public string Name ...
ObservableCollection<KeyValuePair<int,object>> settings
public ObservableCollection<KeyValuePair<int,object>> Settings
{
get {return this.settings;}
set
{
this.settings = value;
this.RaisePropertyChanged ( "Settings" );
}
}
}
现在我正试图像这样绑定它:
EffectWindowViewModel.Effects
的类型为ObservableCollection<EffectViewModel>
。
<ListView Width="1000"
Height="600"
ItemsSource="{Binding EffectWindowViewModel.Effects}">
<ListView.View>
<GridView>
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Key}"
Header="Name" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Value}"
Header="Value" />
</GridView>
</ListView.View>
</ListView>
但我不知道如何指定.Settings
属性。
有什么想法吗?
答案 0 :(得分:4)
您的实际绑定将不起作用,因为EffectViewModel没有键和值属性。我真的不知道你的listview应该显示什么。如果你想要一个EffectViewModel列表,那么Itemssource是正确的。如果你想进一步为每个EffectViewModel显示设置。然后你需要一些itemsscontrol与Itemssource = {Binding Settings}。这个itemsscontrol当然需要一个带有你的Key和Value的itemsstemplate。
我在这里没有VS,但你的GridViewColumn需要一种CellTemplate。这个模板应该包含一个itemscontrol。因为你有2个收藏! 这段代码可能不对,但应该带你走向正确的方向
<ListView Width="1000"
Height="600"
ItemsSource="{Binding EffectWindowViewModel.Effects}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Settings}">
<GridViewColumn.CellTemplate>
<DataTemplatex:Key="myCell4Settings">
<ListView ItemsSource="{Binding.}">
<ListView.View>
<GridView>
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Key}"
Header="Name" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Value}"
Header="Value" />
</GridView>
</ListView.View>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</ListView>
</DataTemplate>
</GridView>
</ListView.View>
顺便说一句,你也可以使用2个独立的列表。一个父组合框或列表框(x:Name = parent)与itemssource = EffectWindowViewModel.Effects和第二个ListView一样,使用itemssource绑定:
ItemsSource="{Binding ElementName=parent, Path=SelectedItem.Settings}"
答案 1 :(得分:2)
你可以尝试:
ItemsSource="{Binding ElementName=Settings, Path=EffectWindowViewModel.Effects}"