Изменение шаблонов данных во время выполнения - PullRequest
2 голосов
/ 20 октября 2010

Я бы хотел иметь возможность менять шаблоны данных во время выполнения, но без кода типа

FindResource("fdds") as DataTemplate

, который я видел много раз.Я хотел бы иметь возможность просто связать шаблон для поиска ресурса в соответствии со свойством в моей модели представления.Концептуально я хотел бы иметь возможность сделать это, но компилятору это явно не нравится:

 ... ItemTemplate="{StaticResource {Binding Path=VMTemplate}}">

А затем другие команды изменят значение VMTemplate во ViewModel.Есть ли способ сделать что-то подобное?

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Это, кажется, самая лучшая ставка:

http://www.e -pedro.com / 2009/06 / использование привязки данных со статическими ресурсами в wpf /

Или, конечно, вы можете вручную передать фактический шаблон в качестве параметра другой команде:

<Button Width="50" Command="{Binding ChangeTemplateCommand}" CommandParameter="{StaticResource vmDataTemplate}">White</Button>
<Button Width="50" Command="{Binding ChangeTemplateCommand}" CommandParameter="{StaticResource vmDataTemplate2}">Lavender</Button>

<ListBox x:Name="bookListBox" Grid.Row="0" ItemsSource="{Binding Path=BookSource}" ItemTemplate="{Binding Path=ItemSourceTemplate}">

А затем во ViewModel:

ChangeTemplateCommand = new RelayCommand(template => {
    this.ItemSourceTemplate = (DataTemplate)template;
    PropertyChanged(this, new PropertyChangedEventArgs("ItemSourceTemplate"));
});
2 голосов
/ 21 октября 2010

Расширение StaticResource - это немедленный поиск при разборе XAML, что означает, что Ресурс должен присутствовать в начале приложения.Чтобы установить шаблон динамически, вам нужно будет сделать что-то похожее на то, как выглядит ваша первая строка.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...