关于在ViewModel中使用视图中的XAML元素,已经提出了许多问题。但是,在ViewModel中定义XAML元素并在视图的XAML标记中使用它呢?这样,ViewModel从一开始就知道该元素(并 * 拥有 * 该元素)。
我试图这样做,认为它会更符合MVVM--ViewModel不必知道整个视图就可以使用这个组件。但是我认识到在ViewModel中定义XAML元素仍然不符合MVVM的精神。但是在这一点上,我只想知道这种技术是否可行。
我知道我可以在ViewModel中定义一个 property,然后将其绑定到视图中定义的XAML元素的 property。例如,在ViewModel中定义一个字符串,然后将其绑定到TextBlock XAML元素的Text属性。但是,是否可以简单地在ViewModel中定义XAML元素本身,然后在视图的XAML标记中使用它?
示例代码。我正在使用C++/WinRT与WinUI 3:
主窗口视图模型.idl
namespace MyApp
{
runtimeclass FooViewModel
{
MainWindowViewModel();
Int32 IntProperty; // I can bind this to a XAML element's property
Microsoft.UI.Xaml.Controls.Frame Frame; // Can I use this in the View?
}
}
主窗口.idl(视图)
import "ViewModel/MainWindowViewModel.idl";
namespace MyApp
{
runtimeclass MainWindow : Micorosoft.UI.Xaml.Window
{
MainWindow();
MainWindowViewModel MainWindowViewModel{ get; };
}
}
主窗口.xaml(视图的XAML)
<Window
x:Class="MyApp.MainWindow"
//...
>
<StackPanel>
// I can bind to a property of MainWindowViewModel as such:
<Slider Minimum="0" Maximum="{x:Bind MainWindowViewModel.IntProperty}" />
// Is there a way to use the Frame defined in MainWindowViewModel here, or can you only create a new Frame instance?
<Frame/>
</StackPanel
</Window>
1条答案
按热度按时间lx0bsm1f1#
是否可以在ViewModel中简单地定义XAML元素本身,然后在视图的XAML标记中使用它?
是的,这将是工作。
我在WinUI3 C#中测试了它,代码工作正常。