如何将ListView绑定到ObservableCollection <keyvaluepair <int,object>&gt;在WPF中的ViewModel中?</keyvaluepair <int,object>

时间:2011-03-22 17:13:15

标签: c# .net wpf xaml data-binding

这样的事情:

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属性。

有什么想法吗?

2 个答案:

答案 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}"