#c# #wpf #templates #binding
#c# #wpf #шаблоны #привязка
Вопрос:
Я хочу легко использовать шаблон, доступный только для чтения, для элемента управления, когда значение свойства в моей модели равно true. Для этого я создал IValueConverter, который возвращает свой параметр (в данном случае шаблон), когда исходное значение равно true, и привязку.Ничего не делать при значении false.
Когда я применяю это к своему элементу управления, я получаю элемент управления без шаблона.
Комментарии:
1. Я пробовал просто возвращать привязку. В моем конвертере ничего нет, поэтому я знаю, что проблема не в этом.
Ответ №1:
Похоже, вы могли бы использовать DataTemplateSelector вместо IValueConverter, что-то вроде:
//namespace MyProject.ViewUtilities
public class MyDataTemplateSelector: DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var localFrameworkElement = container as FrameworkElement;
var modelObject = item as ModelObject;
if(modelObject.BoolProperty){
return Template(localFrameworkElement, "WhenTrueDataTemplate");
}
else
{
return Template(localFrameworkElement, "WhenFalseDataTemplate");
}
}
private DataTemplate Template(FrameworkElement localFrameworkElement, string resourceKeyString)
{
return localFrameworkElement.FindResource(resourceKeyString) as DataTemplate;
}
}
Используется что-то вроде:
<ComboBox xmlns:mpvu="MyProject.ViewUtilities"
ItemsSource="{Binding Path=MyModelObjectCollection}">
<ComboBox.ItemTemplateSelector>
<mpvu:MyDataTemplateSelector/>
</ComboBox.ItemTemplateSelector>
</ComboBox>
Если это не то, что вы хотите, возможно, добавьте какой-нибудь пример кода к вашему сообщению.
Комментарии:
1. На самом деле я решил это, используя что-то похожее на ваш метод (я использовал поведение), но мне было довольно любопытно, почему DoNothing не сработал…