【问题标题】:Declaring Design-Time ViewModel for Avalonia Window为 Avalonia 窗口声明设计时 ViewModel
【发布时间】:2022-01-16 01:03:10
【问题描述】:

我正在寻找为 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}"

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

这里推荐的方法是什么?如果我想显示设计时数据,我会说只有第 3 个选项可以工作。这不是示例中显示的选项。

【问题讨论】:

    标签: c# .net mvvm avaloniaui


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 这很有效,而且很干净,谢谢
    猜你喜欢
    • 2021-07-23
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多