【问题标题】:WPF - How do I bind a ViewModel to a View with parameters in XAML [duplicate]WPF - 如何将 ViewModel 绑定到带有 XAML 参数的视图 [重复]
【发布时间】:2015-09-29 03:04:42
【问题描述】:

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

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

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

通常,当视图不接受任何参数时,这段代码会起作用。但是对于这个项目,我在 View 的构造函数参数中采用了 ViewModel:

public ExampleView(ExampleViewModel viewModel)
{
    InitializeComponent();
    DataContext = viewModel;
}

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

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

【问题讨论】:

  • Stack Overflow 上已经存在许多与 MVVM 的一般使用相关的问题,包括讨论如何绕过在 XAML 中绑定时无法为构造函数指定参数的限制,例如我'已作为重复链接提供。
  • @PeterDuniho 顶部添加的链接没有回答这个问题。但我同意,有很多线程处理 MVVM 方面。
  • 我假设你不理解我的问题,所以我会认为我的问题不是重复的,直到你能给我一个适当的链接以及我的具体问题的正确答案。

标签: c# wpf xaml mvvm


【解决方案1】:

我认为通过构造函数参数分配 DataContext 可能不是一个好主意,因为这是由 dataTemplate 自动完成的,但对于任何其他参数,希望以下建议有帮助!
首先,如果你想在 XAML 中使用ExampleView,那么你需要有默认构造函数,所以上面的构造函数(在你的问题中提到)是不是去上班。 我建议你在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}" />

【讨论】:

  • 谢谢!我还没有真正了解过 DepencyProperties 以及它们是如何工作的。但是我会把它当作花岗岩来工作,并在明天了解更多关于这个解决方案如何以及为什么工作的信息。无论如何,谢谢你的回答!
  • 欢迎您!如果您需要任何帮助,请随时联系我:)
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
相关资源
最近更新 更多