能否直接将XAML的FontIcon元素绑定至ViewModel的FontIcon对象?
直接绑定FontIcon控件到ViewModel的FontIcon对象是否可行?
这种直接绑定的写法不可行,原因如下:
- XAML中的
<FontIcon>是一个UI控件实例,x:Bind的语法是用来绑定控件的依赖属性,而非直接替换整个控件实例。你写的<FontIcon "{x:Bind FontIcon}" />不符合XAML语法规则,也违背了绑定的工作逻辑——绑定是属性值的传递,不是控件实例的替换。 - 你之前的写法是可行的,因为它是将控件的各个依赖属性(FontFamily、Glyph、Foreground)分别绑定到ViewModel中FontIcon对象的对应属性,这属于属性级别的绑定,符合WPF/UWP的绑定机制。
如果想简化绑定代码,更推荐遵循MVVM原则,在ViewModel中直接暴露FontFamily、Glyph、Foreground这些单独的属性,而非持有FontIcon这种UI控件类型,这样既避免ViewModel与UI层耦合,绑定代码也更简洁:
// ViewModel中的代码 public FontFamily IconFontFamily { get; set; } public string IconGlyph { get; set; } public Brush IconForeground { get; set; }
<!-- XAML中的代码 --> <FontIcon FontFamily="{x:Bind IconFontFamily}" Glyph="{x:Bind IconGlyph}" Foreground="{x:Bind IconForeground}"/>
如果一定要在ViewModel中持有图标相关的对象,可以自定义一个包含这些属性的非UI类(比如IconModel),然后在XAML中绑定到这个对象的属性,这样既保持ViewModel的纯净,也能简化绑定逻辑。
内容的提问来源于stack exchange,提问作者Marek Pio
相关产品推荐
相关产品推荐

