gpt4 book ai didi

c# - WPF - 如何使用 XAML 中的参数将 ViewModel 绑定(bind)到 View

转载 作者:行者123 更新时间:2023-12-03 10:27:37 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





MVVM Understanding Issues

(5 个回答)


6年前关闭。




我最近一直在审查 Josh Smith 的代码(来自他著名的 MVVM 文章),并且我一直在尝试创建一个遵循他理想的 MVVM 模式的程序。

现在问题来了,在 Josh Smith 的项目的 MainWindowResources 中,他将 View 绑定(bind)到(此处仅使用任意名称)ExampleViewModel,因此 TabControl(工作区)显示 ExampleView 而不仅仅是 ExampleViewModel 的 .ToString()。例子:

<DataTemplate DataType="{x:Type vm:ExampleViewModel}">
<vw:ExampleView />
</DataTemplate>

通常,当 View 不接受任何参数时,这段代码会起作用。但是对于这个项目,我在 View 的构造函数参数中采用了 ViewModel:
public ExampleView(ExampleViewModel viewModel)
{
InitializeComponent();
DataContext = viewModel;
}

所以现在,我处于静止状态——这种类型的绑定(bind)只允许无参数的构造函数。

那么如何解决这个问题,同时仍然将 View 绑定(bind)到 ViewModel,其中所说的 View 具有构造函数参数?

最佳答案

我认为通过构造函数参数分配 DataContext 可能不是一个好主意,因为这是由 dataTemplate 自动完成的。 ,但对于任何其他参数,希望以下建议有所帮助!
首先,如果您想使用 ExampleView在 XAML 中,那么你需要有 默认构造函数 ,所以上面的构造函数(在你的问题中提到)是 不是 去上类。
我建议你在 ExampleView 中定义一个名为 ViewModel 的依赖属性。 ,然后从 XAML 中使用它。像这样的东西:

public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register
(
"ViewModel",
typeof(ExampleViewModel),
typeof(ExampleView),
new PropertyMetadata(null)
);

public ExampleViewModel ViewModel
{
get { return (ExampleViewModel)GetValue(ViewModelProperty ); }
set { SetValue(ViewModelProperty , value); }
}

public ExampleView()
{
InitializeComponent();
}
//..........

}

然后你可以用 XAML 写这个:
<vw:ExampleView ViewModel="{Binding}" />

关于c# - WPF - 如何使用 XAML 中的参数将 ViewModel 绑定(bind)到 View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com