Есть ли способ использовать DataTemplate с параметром? - PullRequest
1 голос
/ 11 января 2010

Мне нужно динамически добавлять / удалять столбцы GridView, каждый из которых отображает информацию из другого элемента, хранящегося в KeyedCollection (индексируется с помощью tn 'int'). Базовая методика работает, но требует указателя:

<GridViewColumn Header="bid">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Width="60" DataContext="{Binding Elements}" Text="{Binding [546].PropName}" TextAlignment="Center" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

Однако во время выполнения мне нужно добавить еще их с разными целочисленными ключами, и в этот момент я не уверен, как создавать новые шаблоны данных, каждый с различным индексом привязки.

Создание нового DataTemplate с использованием XamlParser кажется довольно уродливым ...

Любая помощь?

1 Ответ

0 голосов
/ 27 января 2010

Ну, насколько я понимаю, вам нужны ваши объекты, чтобы иметь некоторые дополнительные свойства. Что-то вроде Key и ValueFromKey. Эти свойства могут выглядеть примерно так:

public int Key { get; set; }

public object ValueFromKey
{
   get { return this[Key]; }
}

Затем, когда вы добавляете столбцы GridView, вы должны установить значение свойства Key равным «магическому» числу (как 546 из примера).

И ваш DataTemplate будет выглядеть так просто:

<DataTemplate>
    <TextBlock 
        Width="60" 
        Text="{Binding ValueFromKey.PropName}" 
        TextAlignment="Center" 
        />
</DataTemplate>

Проблема возникает, если вы не можете изменить этот класс. Тогда вы, вероятно, могли бы рассмотреть возможность обернуть его своим собственным классом (вроде ViewModel) и связать свой пользовательский интерфейс с коллекцией этих новых экземпляров.

...