Как связать ListView с ObservableCollection <KeyValuePair <int, object >> внутри ViewModel в WPF? - PullRequest
0 голосов
/ 22 марта 2011

Что-то вроде этого:

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 ]

4 голосов
/ 22 марта 2011

Ваша фактическая привязка не будет работать, потому что EffectViewModel не имеет ключа и значения свойства.Я действительно не знаю, что должен отображать ваш список.если вам нужен список EffectViewModels, то Itemssource прав.если вы хотите, чтобы для каждого EffectViewModel отображались настройки.тогда вам нужен некоторый контроль элемента с Itemssource = {Настройки привязки}.этот элемент управления, конечно, будет нуждаться в шаблоне элемента с вашим ключом и значением.

У меня нет VS здесь, но для вашего GridViewColumn необходим тип CellTemplate.и этот шаблон должен состоять из элементов управления.потому что у вас есть 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}"
2 голосов
/ 22 марта 2011

Вы можете попробовать:

ItemsSource="{Binding ElementName=Settings, Path=EffectWindowViewModel.Effects}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...