繁体   English   中英

如何根据绑定值的数据类型在XAML中创建一组不同的UI元素?

[英]How do I create a group of different UI elements in XAML based on datatypes of the bound values?

我在ViewModel的Observable集合中有一个参数列表,希望根据数据类型显示为文本框或组合框,但是我正在努力寻找一种在XAML中实现任何类型的条件功能的方法。

因此,假设我有一个可观察到的参数集合(标题,数据类型,值):

有效,布尔值,

名称,字符串,

年龄,UInt,

我目前使用这些在窗口旁边的标签中生成一系列文本框,以指示类型和参数名称:

<ItemsControl ItemsSource="{Binding Parameters}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Textbox Text="{Binding Value}"
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

但是我不希望每次都成为一个文本框。 我希望能够有一个类似“如果”或“开关”的东西来制作一个组合框,如果数据类型有助于像True / False这样的预定义响应。

我见过类似的帖子,答案似乎暗示建议使用TriggersDataTriggers来执行此操作,这看起来完全符合我的需求。 但是,他们似乎总是使用Style.Triggers将其放在Style ,而不是我当前拥有的任何元素中。 由于我们使用的内容略有差异,因此任何尝试复制我所看到的内容的尝试均以失败告终。 该示例将使用类似ContentControl的样式,并将样式与“ Content = {…}”绑定,这是我不能做的,因为“ Content”不是我可以应用于“ ItemControl”的东西,但是由于它的方式,我需要ItemControl以Content控件无法实现的方式实现ObservableCollection

有没有简单的方法可以将“如果数据类型==布尔值,在此处创建一个组合框”之类的东西? 如果我可以在ViewModel中做到这一点,我也很乐意。 不想在后面的代码中做任何事情,因为MVVM似乎不能很好地发挥作用,并且在以后尝试混合它们时总是将我咬在后面,而我却无法值以正确交互。

非常感谢您的帮助。 我意识到我可以让用户TYPE为true / false并在viewmodel中将其解释为Boolean,但是有几种原因在我的情况下这将无法正常工作。 一方面,会有很多选择。

真的认为您应该使用DataTemplates:

... xmlns:sys="clr-namespace:System;assembly=mscorlib"

<ItemsControl ItemsSource="{Binding Parameters}">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type sys:Boolean}">
            <Checkbox IsChecked="{Binding}" />
        </DataTemplate>
        <DataTemplate DataType="{x:Type sys:String}">
             <TextBlock Text="{Binding}" />
        </DataTemplate>
    </ItemsControl.Resources>
    <ItemsControl.ItemTemplate>
         <DataTemplate>
             <StackPanel Orientation="Horizontal">
                 <TextBlock Text="{Binding Title}" />
                 <ContentPresenter Content="{Binding Value}" />
             </StackPanel>
         </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

您也可以使用自己的类型,它将自动检测和使用数据类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM