为 Avalonia 声明设计时 ViewModel Window

Declaring Design-Time ViewModel for Avalonia Window

我正在寻找为 Avalonia 声明设计时 ViewModel 的正确方法 window。

一些样本表明

d:DataContext="{d:DesignInstance viewModels:LoginViewModel, IsDesignTimeCreatable=True}"

这抛出

XamlParseException at 5:5: Unable to resolve type DesignInstance from namespace http://schemas.microsoft.com/expression/blend/2008

默认 Avalonia MVVM 模板建议

<Design.DataContext>
    <vm:MainWindowViewModel/>
</Design.DataContext>

如果 ViewModel 接受参数,它会抛出

XamlLoadException at 16:10: Unable to find public constructor for type Demo.CloseNonModalDialog:Demo.CloseNonModalDialog.CurrentTimeDialogViewModel()

我想添加一个默认的无参数构造函数是一种选择。

对于 MvvmLight/WPF,我曾经将 ViewLocator 作为静态资源引用

DataContext="{Binding Source={StaticResource Locator}, Path=MainWindow}"

这是一个选项,虽然我还没有找到声明和引用资源的正确方法。

此处推荐的方法是什么?如果我想显示设计时数据,我会说只有第三个选项有效。这不是示例中显示的选项。

Unable to find public constructor for type Demo.CloseNonModalDialog:Demo.CloseNonModalDialog.CurrentTimeDialogViewModel()

您可以通过 x:Arguments XAML 指令指定参数,参见 https://docs.microsoft.com/en-us/dotnet/desktop/xaml-services/xarguments-directive

That's an option, although I haven't yet found the right way to declare and reference the resource.

我建议声明 DesignData class 并使用 x:Static,这会给你更多的灵活性。 e. g.

class DesignData
{
    public MyViewModel MyViewModel => new MyViewModel(...);
}

d:DataContext="{x:Static local:DesignData.MyViewModel}"

与 StaticResource 方法不同,在正常的应用程序执行期间也不会创建视图模型。