Возможно ли отменить привязку WPF к элементу управления.Свойство шаблона с использованием привязки.Ничего не нужно?

#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 не сработал…