Как я могу сделать элемент управления в Wpf зависимым от свойства в viewmodel?

#wpf #data-binding

Вопрос:

У меня есть эти коды, но я не хочу просто делать элемент управления видимым или невидимым , я не хочу его создавать, потому что он работает в фоновом режиме и выполняет некоторую работу, которая требует времени, и я этого не хочу. как я могу это сделать? Могу ли я использовать условие if в xaml in wpf ? Я слышал о триггерах, но не знаю, как это сделать в моем примере?

 <ContentControl Content="{Binding ViewService[NoteSaveView]}" Visibility="{Binding ViewModeVisibility[Insert]}"/>
    
<telerik:RadTabControl TabOrientation="Horizontal" TabStripPlacement="Right" Padding="5" BorderThickness="0" Margin="0 -5 -5 -5" Visibility="{Binding ViewMode,Converter={StaticResource UpdateViewToVisibility}}">
<telerik:RadTabItem Header="صفحه اصلی" Content="{Binding ViewService[NoteSaveView]}"/>
<telerik:RadTabItem Header="تاریخچه" Content="{Binding ViewService[LogView]}"/>
</telerik:RadTabControl>
 

Изменить:
наконец-то я решил свою проблему с этим кодом:

 <ContentControl>
            <ContentControl.Content>
                <MultiBinding Converter="{StaticResource ViewModeVisibilityToContent}">
                    <Binding Path="ViewModeVisibility[Insert]"/>
                    <Binding Path="ViewService[NoteSaveView]"/>
                </MultiBinding>
            </ContentControl.Content>
        </ContentControl>
 

Комментарии:

1. Вы смотрели на ContentControl? ContentTemplateSelector ?

Ответ №1:

Вы можете использовать DataType свойство a DataTemplate , а затем назначить объекту данных свойство, чтобы активировать DataTemplate или null деактивировать его.
В приведенном ниже коде вам просто нужно задать PropertyInViewModel тип object в viewmodel для некоторых int , чтобы активировать DataTemplate или null деактивировать его.

 <StackPanel xmlns:System="clr-namespace:System;assembly=mscorlib">
    <StackPanel.Resources>
        <DataTemplate DataType="{x:Type System:Int32}">
            <TextBox Text="{Binding Mode=OneWay}" Foreground="Beige" Background="Brown" Height="20" Width="50"/>
        </DataTemplate>
    </StackPanel.Resources>

    <ContentControl Content="{Binding PropertyInViewModel}"/>
</StackPanel>