当前位置:网站首页>win10 uwp xaml 绑定接口
win10 uwp xaml 绑定接口
2022-08-04 18:38:00 【林德熙】
本文告诉大家如何在 xaml 绑定属性使用显式继承接口。
早上快乐 就在你的心问了我一个问题,他使用的属性是显式继承,但是无法在xaml绑定
我写了简单的代码,一个接口和属性
public class Foo : INotifyPropertyChanged, IF1
{
public Foo(string name)
{
_name = name;
}
private string _name;
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
string IF1.Name
{
get { return _name; }
set { _name = value; OnPropertyChanged(); }
}
}
public interface IF1
{
string Name { set; get; }
}
然后我尝试写一个列表,在前台绑定
public ObservableCollection<Foo> Foo { set; get; } = new ObservableCollection<Foo>()
{
new Foo("jlong"){}
};
<ListView ItemsSource="{x:Bind Foo}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Foo">
<TextBlock Text="{Binding Path=Name }"></TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
但是这样写出现绑定错误,因为在 Foo 是找不到 Name 属性,需要使用 IF1.Name 去拿到
我修改了代码
<TextBlock Text="{Binding (local:IF1.Name)}"></TextBlock>
但是运行就出现了异常,说未指定,最后我尝试了新的方法,居然就编译通过,下面让我来告诉大家如何使用这个方法
<TextBlock Text="{x:Bind Path=(local:IF1.Name) }"></TextBlock>
如果使用显式继承,那么在使用的时候需要使用他的接口来拿,但是接口不是直接写,需要先写空间,一般空间是写在最上,请看下面代码
<Page
x:Class="JoleenOneal.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:JoleenOneal" 这是空间
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
然后需要加上括号,才可以使用
为什么上面的代码无法使用,现在我还不知道。
我找到了下面的观点
The data binding team discussed adding support for interfaces a while ago but ended up not implementing it because we could not come up with a good design for it. The problem was that interfaces don’t have a hierarchy like object types do. Consider the scenario where your data source implements both
IMyInterface1
andIMyInterface2
and you have DataTemplates for both of those interfaces in the resources: which DataTemplate do you think we should pick up?When doing implicit data templating for object types, we first try to find a
DataTemplate
for the exact type, then for its parent, grandparent and so on. There is very well defined order of types for us to apply. When we talked about adding support for interfaces, we considered using reflection to find out all interfaces and adding them to the end of the list of types. The problem we encountered was defining the order of the interfaces when the type implements multiple interfaces.The other thing we had to keep in mind is that reflection is not that cheap, and this would decrease our perf a little for this scenario.
So what’s the solution? You can’t do this all in XAML, but you can do it easily with a little bit of code. The
ItemTemplateSelector
property ofItemsControl
can be used to pick whichDataTemplate
you want to use for each item. In theSelectTemplate
method for your template selector, you receive as a parameter the item you will template. Here, you can check for what interface it implements and return theDataTemplate
that matches it.
边栏推荐
猜你喜欢
PHP代码审计8—SSRF 漏洞
ros2订阅esp32发布的电池电压数据
PHP代码审计7—文件上传漏洞
Develop those things: How to obtain the traffic statistics of the monitoring site through the EasyCVR platform?
DOM Clobbering的原理及应用
EuROC 数据集格式及相关代码
BigDecimal 使用注意!!“别踩坑”
用Excel绘制统计图
网络运维管理从基础到实战-自用笔记(1)构建综合园区网、接入互联网
Flask framework implementations registered encryption, a Flask enterprise class learning 】 【
随机推荐
ros2订阅esp32发布的电池电压数据-补充
The upgrade of capacity helps the flow of computing power, the acceleration moment of China's digital economy
Go 言 Go 语,一文看懂 Go 语言文件操作
Route lazy loading
Nintendo won't launch any new hardware until March 2023, report says
Scala104 - Built-in datetime functions for Spark.sql
当项目中自动格式化插件Prettier和ESLint冲突报错时如何解决
ptables基本语法使用规则
ros2订阅esp32发布的电池电压数据
【填空题】130道面试填空题
测试/开发程序员男都秃头?女都满脸痘痘?过好我们“短暂“的一生......
2019年海淀区青少年程序设计挑战活动小学组复赛试题详细答案
Matlab drawing 1
Day018 继承
HCIA-R&S自用笔记(22)STP状态与计时器、STP拓扑变化、STP配置及实验
【AI+医疗】斯坦福大学最新博士论文《深度学习在医学影像理解中的应用》,205页pdf
EasyCVR如何通过接口调用设备录像的倍速回放?
入选爱分析·银行数字化厂商全景报告,网易数帆助力金融数字化场景落地
群友求助,一周没有搞定的需求,3分钟就解决了?
用Excel绘制统计图