【问题标题】:UWP XAML Intellisense DataTemplate.DataTypeUWP XAML 智能感知 DataTemplate.DataType
【发布时间】:2021-02-26 22:07:52
【问题描述】:

为什么智能感知会过滤掉接口和抽象类?如果我将 DataType 设置为抽象类,它似乎仍然可以正常工作。也许这只是一个错误?此外,在 DataTemplate 内部,当我尝试 {x:Bind} 时,它会过滤掉继承的属性,所以如果我有 Item : BaseBase 有属性 NameDataType="Item",它会过滤掉属性 @987654326 @ 如果我仍然使用它,它似乎解析为类名。我错过了文档中的某些内容吗?我是否应该为要绑定到 xaml 控件的每种类型创建特殊的非抽象包装类?

【问题讨论】:

    标签: xaml uwp intellisense datatemplate


    【解决方案1】:

    经过我的测试,在使用 X:Bind 时,编译器似乎无法识别继承的接口属性。但它适用于抽象类。

    您可以按照示例检查您的步骤。

    XAML 代码:

    <ListView x:Name="List" ItemsSource="{x:Bind Fruits}">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="local:Fruit">
                        <TextBlock Text="{x:Bind price}"/>
                    </DataTemplate>
                </ListView.ItemTemplate>
    </ListView>
    

    后面的代码:

    public sealed partial class MainPage : Page
    {
        public ObservableCollection<Fruit> Fruits{get;set;}
        public MainPage()
        {
            this.InitializeComponent();
            Fruits = new ObservableCollection<Fruit>()
            {
                new Fruit(){name="apple",price=12},
                new Fruit(){name="peach",price=15},
                new Fruit(){name="pear",price=8},
                new Fruit(){name="banana",price=31},
                new Fruit(){name="grape",price=5}   
            };        
        }
    }
    public class Fruit: IFruit
    {
        public string name { get; set;}
    }
    public abstract class IFruit
    {    
        public int price { get; set;}
    }
    

    【讨论】:

    • 我认为你是对的。当您需要 x:DataType 作为接口或抽象类时,这是不幸的。我希望有一个我不知道的解决方法。
    • 派生自official document,在将 {x:Bind} 与数据模板一起使用时,您必须通过设置 x:DataType 值来指示要绑定的类型。在我的场景中,当我使用 x:DataType 表示子类时,它不会过滤掉基类的属性,例如“价格”。
    猜你喜欢
    • 2010-12-14
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2020-10-23
    • 2015-01-05
    • 1970-01-01
    相关资源
    最近更新 更多