这个问题在这里已经有了答案:
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/