Можно ли отменить привязку WPF к свойству Control.Template, используя Binding.DoNothing? - PullRequest
2 голосов
/ 14 апреля 2011

Я хочу с легкостью использовать шаблон только для чтения для элемента управления, когда значение свойства в моей модели равно true.Для этого я создал IValueConverter, который возвращает его параметр (в данном случае шаблон), когда исходное значение равно true, и Binding.DoNothing, когда false.

Когда я применяю это к своему элементу управления, я получаюэлемент управления без шаблона.

1 Ответ

1 голос
/ 14 апреля 2011

Похоже, вы могли бы использовать 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>

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

...