Name
和x:Name
的区别
这两个属性都可以用在XAML元素上,来指定XAML元素的名字。区别在于x:Name
是XAML本身支持的。(以x:开头都是关于XAML本身的,也就是被XAML解析器所支持的)
指定了x:Name
之后,XAML解析器就会在XAML的背靠代码类中生成一个x:Name
的同名权属,保存到x:Name
所处元素的引用。而Name
,则是XAML元素对应的类的一个属性,通过RuntimeNamePropertyAttribute的方式映射到x:Name
。通常从FrameworkElement派生出来的类型具有Name
属性
In WPF, what are the differences between the x:Name and Name attributes?
Binding
和x:Bind
的区别
两者功能类似,但
Binding
:
- 动态,通用,大概率基于反射
- 可以绑定到DataContext,所以它假设使用Binding的元素或自带有或从上级继承DataContext
- 可以绑定到某个对象的权属名字
- 可以在代码中创建
- 需要使用ElementName=来指定源元素名
x:Bind
:
- 比
Binding
晚出现 - 静态,编译期间生成,效率略有提高,调试略方便
- 绑定到Framework 元素(也就是背靠类型)
- 默认为OneTime类型绑定,而不是OneWay
- 无法在代码中创建,只能在XAML中创建
另外值得注意的是,不管是x:Bind还是Binding,他们的UpdateSourceTrigger出了TextBox.Text之外默认都是PropertyChanged; 对于TextBox.Text,其默认值是LostFocus,意味着丢失焦点以后才能获得通知。 参考:
ListView和ListBox有什么区别
根据ListBox的Remarks章节的说明,和ListView相比,ListBox功能简单,就是用于罗列和选择项目。而ListView则增加了许多数据绑定相关的功能。所以一般情况下,选ListView;而ListBox可以用在向后兼容或者需求简单的场景。
(完)