#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>