能否在C++/WinRT+WinUI3的ViewModel中定义XAML元素并在View中使用?
在ViewModel中定义XAML元素并在View的XAML中使用是否可行?
之前已经有不少关于在ViewModel中调用View里XAML元素的讨论,那反过来——能不能在ViewModel里定义XAML元素,再在View的XAML标记中直接使用这个元素,让ViewModel从一开始就持有并管理它?
我原本尝试这么做,一度觉得这样更贴合MVVM规范(ViewModel不用了解整个View就能用指定组件),但后来也意识到这其实违背了MVVM的核心思想。不过现在我只想知道这种技术实现是否可行。
我知道常规的做法是在ViewModel中定义属性,再绑定到View中XAML元素的对应属性,比如在ViewModel里定义字符串属性,绑定到TextBlock的Text属性。但我想知道的是:能不能直接在ViewModel中定义XAML元素本身,然后在View的XAML里引用这个已定义的元素?
示例代码(C++/WinRT + WinUI3)
MainWindowViewModel.idl
namespace MyApp { runtimeclass FooViewModel { MainWindowViewModel(); Int32 IntProperty; // 我可以将这个属性绑定到XAML元素的属性上 Microsoft.UI.Xaml.Controls.Frame Frame; // 能否在View中使用这个Frame? } }
MainWindow.idl(View层)
import "ViewModel/MainWindowViewModel.idl"; namespace MyApp { runtimeclass MainWindow : Micorosoft.UI.Xaml.Window { MainWindow(); MainWindowViewModel MainWindowViewModel{ get; }; } }
MainWindow.xaml(View层XAML)
<Window x:Class="MyApp.MainWindow" //... > <StackPanel> // 我可以像这样绑定MainWindowViewModel的属性: <Slider Minimum="0" Maximum="{x:Bind MainWindowViewModel.IntProperty}" /> // 有没有办法使用MainWindowViewModel中定义的Frame?还是只能在这里新建一个Frame实例? <Frame/> </StackPanel </Window>
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

