Eti*_*and 6 .net c# mvvm avaloniaui
我正在寻找正确的方法来声明 Avalonia 窗口的设计时 ViewModel。
一些样本表明
d:DataContext="{d:DesignInstance viewModels:LoginViewModel, IsDesignTimeCreatable=True}"
Run Code Online (Sandbox Code Playgroud)
这会抛出
XamlParseException at 5:5: Unable to resolve type DesignInstance from namespace http://schemas.microsoft.com/expression/blend/2008
Run Code Online (Sandbox Code Playgroud)
默认 Avalonia MVVM 模板建议
<Design.DataContext>
<vm:MainWindowViewModel/>
</Design.DataContext>
Run Code Online (Sandbox Code Playgroud)
如果 ViewModel 接受参数,它会抛出
XamlLoadException at 16:10: Unable to find public constructor for type Demo.CloseNonModalDialog:Demo.CloseNonModalDialog.CurrentTimeDialogViewModel()
Run Code Online (Sandbox Code Playgroud)
我想添加默认的无参数构造函数是一种选择。
使用 MvvmLight/WPF,我曾经将 ViewLocator 作为静态资源引用
DataContext="{Binding Source={StaticResource Locator}, Path=MainWindow}"
Run Code Online (Sandbox Code Playgroud)
这是一个选项,尽管我还没有找到声明和引用资源的正确方法。
这里推荐的方法是什么?如果我想显示设计时数据,我会说只有第三个选项才有效。这不是示例中显示的选项。
无法找到类型 Demo.CloseNonModalDialog:Demo.CloseNonModalDialog.CurrentTimeDialogViewModel() 的公共构造函数
您可以通过x:ArgumentsXAML 指令指定参数,请参阅https://learn.microsoft.com/en-us/dotnet/desktop/xaml-services/xarguments-directive
这是一个选项,尽管我还没有找到声明和引用资源的正确方法。
我建议声明DesignDataclass 并使用x:Static,它会给你更大的灵活性。例如
class DesignData
{
public MyViewModel MyViewModel => new MyViewModel(...);
}
Run Code Online (Sandbox Code Playgroud)
d:DataContext="{x:Static local:DesignData.MyViewModel}"
与 StaticResource 方法不同,视图模型创建在正常应用程序执行期间也不会发生。