跳到主要内容
版本:11.0.0

视图定位器

虽然视图定位器的使用是默认模板的一部分,但需要注意它并不是强制要求的。它是一个可选工具,旨在帮助您使用模型-视图-视图模型(MVVM)设计模式来构建Avalonia应用程序。

视图定位器是Avalonia中用于解析与特定视图模型对应的视图(用户界面)的机制。这是MVVM(模型-视图-视图模型)模式的核心部分,该模式将图形用户界面的开发与业务逻辑或后端逻辑的开发分离。

工作原理

视图定位器使用命名约定将视图模型类型映射到视图类型。默认情况下,它会将完全限定的视图模型类型名称中每次出现的字符串“ViewModel”替换为“View”。

例如,给定一个名为MyApplication.ViewModels.ExampleViewModel的视图模型,视图定位器将查找一个名为MyApplication.Views.ExampleView的视图。

视图定位器通常与DataContext属性一起使用,该属性用于将视图与其视图模型关联起来。

以下是一个简单的用法示例:

public class ViewLocator : IDataTemplate
{
public bool SupportsRecycling => false;

public Control Build(object data)
{
var name = data.GetType().FullName.Replace("ViewModel", "View");
var type = Type.GetType(name);

if (type != null)
{
return (Control)Activator.CreateInstance(type);
}
else
{
return new TextBlock { Text = "Not Found: " + name };
}
}

public bool Match(object data)
{
return data is ViewModelBase;
}
}

在此示例中,视图定位器被实现为IDataTemplateBuild方法创建视图的视图模型,Match方法检查数据对象是否是此定位器知道如何处理的视图模型。If you do not have a ViewModelBase class, at a minimum your ViewModel must implement INotifyPropertyChanged, and the comparison in Match should be changed accordingly.

自定义视图定位器

您可以自定义视图定位器以使用不同的约定。例如,您可能希望在不同的程序集中查找视图,或使用不同的命名约定。为此,您可以创建一个实现IDataTemplate接口的类来实现自己的视图定位器,并用自己的视图定位器替换默认的视图定位器。

Using the View Locator

默认情况下,视图定位器在 App.axaml 中作为 DataTemplate 引用,位于 Application.DataTemplates XAML 标签的内容中。确保在应用程序根标签的 xmlns:local 属性中包含其适当的 using 语句。

<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="LearningAvalonia.App"
xmlns:local="using:LearningAvalonia"
RequestedThemeVariant="Default">
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
<!-- "Default" ThemeVariant 是取决于系统的主题变体属性,"Dark" 和 "Light" 是另外可用的选项 -->
<Application.DataTemplates>
<local:ViewLocator />
</Application.DataTemplates>

<Application.Styles>
<FluentTheme />
</Application.Styles>
</Application>