XAML答疑解惑(一)

Sat 03 August 2019 / In categories FAQ

XAML

Namex: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?

Bindingx: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可以用在向后兼容或者需求简单的场景。

(完)

Load Disqus Comments