当我为WinUI 3或UWP设计一个很酷的新UserControl
时,我应该更喜欢创建一个具有许多属性的控件,还是一个直接绑定到ViewModel的控件?
示例
为了便于讨论,让我们从Material UI中选取这张基本卡片:
我应该选择:
方法1:暴露许多属性
<!-- Many properties -->
<Card
Subtitle="Word of the Day"
Title="Be*nev*o*lent"
LowerSubtitle="adjective"
Description="well meaning and kindly. 'a benevolent smile'"
LinkText="Learn more"
LinkUri="http://example.com" />
方法2:仅显示ViewModel
x一个一个一个一个x一个一个二个x
背景
在C++/WinRT指南XAML controls; bind to a C++/WinRT property(将C++/WinRT与XAML一起使用的官方介绍)中,您最终将一些数据直接绑定到ViewModel:
<!-- MainPage.xaml -->
<Button Click="ClickHandler" Content="{x:Bind MainViewModel.BookSku.Title, Mode=OneWay}"/>
它甚至写道(在比较ViewModel和Models的上下文中,强调了这一点):
视图模型是视图的抽象,因此它直接绑定到视图(XAML标记)。**数据模型是数据的抽象,它只从视图模型中使用,而不直接绑定到XAML。因此,您可以将数据模型声明为C++结构或类,而不是运行时类。它们不需要在MIDL中声明,你可以自由使用任何你喜欢的继承层次结构。
我不清楚这是在说“ViewModels和View代码隐藏应该绑定到View,而不是Models”还是“ViewModels应该绑定到View,而不是View代码隐藏或Models”。
此外,在后续的XAML custom (templated) controls with C++/WinRT中,您使用DependencyProperties创建了一个BgLabelControl
:
<!-- MainPage.xaml -->
<local:BgLabelControl Background="Red" Label="Hello, World!"/>
但是它没有解释什么时候需要采用这种方法(相对于MainPage方法),也没有解释什么是UserControl
(而不是Control
)的惯用方法。
我不太清楚这些文件:
- 一般来说,我应该选择(依赖项)属性还是直接ViewModel绑定?
- 这在
Control
s、UserControl
s和Page
s之间是否不同?
结论
因此:
如何决定何时公开UserControl
上的属性,或者何时将它们直接绑定到ViewModels?
1条答案
按热度按时间woobm2wo1#
没有明确的规则或原则,但让我回答你的问题。
一般来说,我应该选择(依赖项)属性还是直接ViewModel绑定?控件、用户控件和页面之间是否有区别?
DependencyProperties
用于(自定义)Controls
和UserControls
,ViewModels用于Pages
。说明
*ViewModel就像是一个适配器,在你的View和Model之间工作,逻辑可能很简单,但要尽量简单。
FilePickerDialogs
或VisualState
。