根据条件更改要使用的数据模板 [英] Change DataTemplate to use depending on condition
本文介绍了根据条件更改要使用的数据模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有3个用户控件
控件1
控件2
控件3
我有一个包含ItemsControl的堆栈面板
<UserControl.Resources>
<DataTemplate x:Key="Template1">
<my:UserControl1 Height="117"/>
</DataTemplate>
<DataTemplate x:Key="Template2">
<my:UserControl3 Height="117"/>
</DataTemplate>
<DataTemplate x:Key="Template3">
<my:UserControl3 Height="117"/>
</DataTemplate>
</UserControl.Resources>
<StackPanel Name="stackPanel3" Orientation="Vertical" VerticalAlignment="Bottom" Width="Auto">
<ItemsControl ItemsSource="{Binding BlocksForMonth.Blocks}" ItemTemplate="{StaticResource Template1}">
</ItemsControl>
</StackPanel>
BlocksForMonths.Blocks是视图模型列表。BLOCKS类有一个名为ClipType的特性。如果剪辑类型为1,我希望使用Template1。如果是%2,我想使用模板%2。如果是%3,我想使用模板%3
这些模板包含不同的用户控件
如何通过绑定完成此操作?
我已经考虑了1个模板和3个控件,但我不知道如何绑定可见性?
在此XAML中,我绑定到一个列表,而不是单个项目
保罗
推荐答案
我会将这3个控件放在同一个模板中,并使用可见性来显示正确的一个。我要做的是构建一个IValueConverter来转换决定值(您的例子是ClipType),并将其与ConverterParameter进行比较。如果它们相等,则返回Visibility.Visible,否则返回Visibility.Collip。
<UserControl.Resources>
<my:ClipTypeToVisibilityConverter x:Key="converter"/>
<DataTemplate x:Key="Template">
<StackPanel>
<my:UserControl1 Height="117" Visibility={Binding ClipType, Converter={StaticResource converter}, ConverterParameter=1} />
<my:UserControl2 Height="117" Visibility={Binding ClipType, Converter={StaticResource converter}, ConverterParameter=2} />
<my:UserControl3 Height="117" Visibility={Binding ClipType, Converter={StaticResource converter}, ConverterParameter=3} />
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<StackPanel Name="stackPanel3" Orientation="Vertical" VerticalAlignment="Bottom" Width="Auto">
<ItemsControl ItemsSource="{Binding BlocksForMonth.Blocks}" ItemTemplate="{StaticResource Template}">
</ItemsControl>
</StackPanel>
此示例假定ClipType属性位于正在显示的列表中的每个项目视图模型上。
这是一个C#示例转换器。
public class ClipTypeToVisibilityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var clipType = value.ToString();
if (clipType == (string)parameter))
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
抱歉,一切都是空对码。但我想你已经明白了。
这篇关于根据条件更改要使用的数据模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文