声明Avalonia窗口的设计时ViewModel

5

我正在寻找一种正确的方式来声明一个 Avalonia 窗口的设计时 ViewModel。

有些示例建议:

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}"

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

在这里推荐什么方法?如果我想显示设计时数据,我会说只有第三个选项才能起作用。这不是示例中显示的选项。

1个回答

5

无法找到类型Demo.CloseNonModalDialog的公共构造函数:Demo.CloseNonModalDialog.CurrentTimeDialogViewModel()

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

那也是一种选择,尽管我还没有找到正确声明和引用资源的方法。

我建议声明DesignData类并使用x:Static,这将为您提供更多的灵活性,例如:

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

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

采用这种方式,与StaticResource方法相比,视图模型的创建不会发生在正常应用程序执行期间。


那个可以运行并且足够简洁,谢谢。 - Etienne Charland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接