【问题标题】:Bind Window object to viewmodel property from XAML从 XAML 将 Window 对象绑定到 viewmodel 属性
【发布时间】:2018-08-21 11:47:55
【问题描述】:

我有这样的视图模型:

public class ViewModel
{
    public IView View { get; set; }
}

以及实现IView的Window。

我需要将这个确切的 Window 绑定到 view 属性而不更改 ViewModel 类。

这可能只与该窗口的 XAML 相关吗?

我可以这样做:https://stackoverflow.com/a/47266732/3206223

但必须更改ViewModel,在这种情况下这是不可取的。

【问题讨论】:

  • 如何设置窗口的DataContext属性?
  • 基本上:window.DataContext = New ViewModel(properties);。然后:window.ShowDialog();.
  • 此部分可能会根据需要进行更改。
  • 那么只设置视图模型的 View 属性怎么样? window.DataContext = new ViewModel(properties) { View = window };
  • 就是这样!谢谢!

标签: c# wpf mvvm binding


【解决方案1】:

您需要在 XAML 中实例化 ViewModel 并将其设置为 DataContext:

<Window x:Class="MyApp.AppWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:MyApp.ViewModels">
      <Window.DataContext>
           <local:ViewModel/>
      </Window.DataContext>
</Window>

编辑:

改变

window.DataContext = new ViewModel(properties);
window.ShowDialog();

var vm = new ViewModel(properties);
vm.View = window;
window.ShowDialog();

【讨论】:

  • 我已经将 ViewModel 绑定到 DataContext(以其他方式但仍然如此)。现在我需要将此窗口本身绑定到 ViewModel.View。
  • @InfernumDeus 您只需要将属性 View 添加到您的路径中,例如 其中 Text 是您要绑定到的 IView 中的公共属性示例
  • 问题是我已经知道如何从 IView 绑定 data 了。我需要绑定这个&lt;Window ...&gt; 对象才能访问VIewModel 中的IView。
  • 为了清楚起见,我需要在 public IView View 属性中使用 Window 对象。
  • 您不需要更改 ViewModels 代码本身,只需更改您设置窗口的 DataContext 的代码......再次:您在哪里实例化 ViewModel 对象/您在哪里设置 DataContext ?
猜你喜欢
  • 1970-01-01
  • 2017-01-18
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2015-03-25
相关资源
最近更新 更多