在XAML 4.5+中创建一个通用列表

3

我正在为我的一个用户控件制作规则列表。该列表包含自定义类型List<StringInputRule>。我正在使用DependancyProperty进行数据绑定。

我尝试在XAML中设置控件的规则如下:

<controlsDefault:DateEditWithStringInput>
    <controlsDefault:DateEditWithStringInput.Rules>
       <x:Array Type="controlsDefault:StringInputRule" xmlns:sys="clr-namespace:System;assembly=mscorlib">
            <controlsDefault:StringInputRule Key="T" Amount="1" Unit="Day"/>
            <controlsDefault:StringInputRule Key="W" Amount="1" Unit="Week"/>
            <controlsDefault:StringInputRule Key="M" Amount="1" Unit="Month"/>
       </x:Array>
     </controlsDefault:DateEditWithStringInput.Rules>
</controlsDefault:DateEditWithStringInput>

c#代码,用于控件的依赖属性:

public partial class DateEditWithStringInput : UserControl
{
    public DateEditWithStringInput()
    {
        InitializeComponent();
        Rules = new List<StringInputRule>();
    }

    public IList<StringInputRule> Rules
    {
        get { return (IList<StringInputRule>)GetValue(RulesProperty); }
        set { SetValue(RulesProperty, value); }
    }

    public static readonly DependencyProperty RulesProperty =
        DependencyProperty.Register("Rules", typeof(IList<StringInputRule>), typeof(DateEditWithStringInput), new PropertyMetadata(new List<StringInputRule>()));
}

以下方法不传递任何值,但它是可编译的。我已经阅读到从2009年4.0版本开始,泛型类型可以在xaml中初始化,但我没有找到一个例子。
我的问题是:如何在xaml中定义泛型List?
编辑:截至目前,该问题还没有确定的解决方案。
解决方法(由Szabolcs Dézsi指出):how use List<T> within xaml?
1个回答

0

它会看起来像这样:

<controlsDefault:DateEditWithStringInput.Rules>
    <generic:List x:TypeArguments="controlsDefault:StringInputRule">
        <controlsDefault:StringInputRule Key="T" Amount="1" Unit="Day"/>
        <controlsDefault:StringInputRule Key="W" Amount="1" Unit="Week"/>
        <controlsDefault:StringInputRule Key="M" Amount="1" Unit="Month"/>
    </generic:List>
</controlsDefault:DateEditWithStringInput.Rules>

x:TypeArguments 是 XAML 2009 的一个特性。不幸的是,在编译的 XAML 中不支持它,所以您将无法在 WPF 应用程序中使用它。在这里, 这里这里阅读更多信息。


2
很遗憾,我不能将这个标记为答案,因为它只是陈述了你不能这样做的事实,但我已经通过添加继承自List<StringInputRule>的额外非泛型类型并使用子类作为类型来解决了这个问题。你可以相应地修改你的答案,我会将其标记为答案。祝你有美好的一天! - Karolis Kajenas
1
是的,我知道这个,不过问题已经有重复了:https://dev59.com/21rUa4cB1Zd3GeqPkoRR#7152297 尽管我觉得这只是一个解决方法而不是回答你的具体问题:“如何在xaml中定义通用列表?” - Szabolcs Dézsi
最初我正在寻找一种更可靠的方法来完成它,就像你在评论中提到的那样,这就是为什么我写下这些问题的原因。显然,你不能没有这个解决方法 :) 感谢你的努力! - Karolis Kajenas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接