Задать свойства окна на основе типа данных UserControl - PullRequest
0 голосов
/ 10 мая 2010

У меня есть простое окно, которое является контейнером для различных представлений. У меня есть DataTemplate, который показывает правильное представление в зависимости от того, какое свойство окна MainViewModel установлено.

<DataTemplate DataType="{x:Type VM:StartupViewModel}">
    <AdornerDecorator>
        <V:StartupView />
    </AdornerDecorator>
</DataTemplate>

Что я хотел бы сделать для определенных представлений, изменить некоторые свойства в базовом окне, например WindowStyle, ResizeMode и т. Д., Что-то вроде триггеров, но для типов данных вместо значений свойств? Как я мог сделать это?

редактирование:

После небольшого поиска в Google, я думаю, что хочу сделать что-то вроде этого:

<Window.Style>
        <Style>
            <Setter Property="Window.WindowStyle"
                    Value="SingleBorderWindow" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self} , Path=DataContext.MainViewModel}"
                             Value="{x:Type VM:StartupViewModel}">
                    <Setter Property="Window.WindowStyle"
                            Value="None" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Style>

Это ром, но не имеет никакого эффекта ...

Ответы [ 2 ]

0 голосов
/ 17 мая 2010

Хорошо, после большого разочарования я понял, почему это не работает. Путь привязки возвращал правильный объект, но, поскольку Value является x: Type, похоже, он сравнивает объект экземпляра с типом. Поэтому я добавил простой конвертер, который возвращает тип объекта, и он работал.

Я предполагал, что, если я укажу свое значение как x: Type, WPF узнает, что я хочу сравнить тип привязки со значением. В течение долгого времени я полагал, что привязка была в порядке, и проблема была в триггере, который, насколько я мог видеть, должен был работать. Начинал думать, что что-то не так с visual studio; D

0 голосов
/ 10 мая 2010

Я не уверен, что вы можете связать напрямую с типом данных. Но вы можете установить некоторые свойства в ViewModel в соответствии с выбранным типом данных. В свою очередь вы можете привязать свойство WindowStyle к этому свойству.

Если вы можете каким-либо образом привязаться к DataType, вы можете использовать BindingConverters и привязывать напрямую к свойствам окна.

...