0

请您帮忙解决以下问题...

出于自定义弹出对话的目的,我希望按照以下方式构建我的 WPF 应用程序:

Window > Grid > User Control > FlowLayout > Data Template > User Control 

...大括号代表“包含”

我有一个模型MyType.cs,我想在最终用户控件中显示它的内容UserControl2.xaml

我有这个模型的ViewModel ,以及这些 ViewModel列表的ViewModelViewMod.cs ListViewModel.cs

在以编程方式创建UserControl1并设置它的数据上下文之后,我设置了FlowLayoutControl的ItemSource属性UserControl1.cs

据我从调试中可以看出,我的ViewModel列表的解析正在工作,但是我不确定如何从MyType返回数据,因为在请求绑定的UserControl2的数据上下文时返回 null

...

如果我的要求不清楚,请道歉。这是我第一次尝试 WPF,任何帮助将不胜感激

解决方案文件

4

1 回答 1

0

尝试:

public UserControl2() {
  InitializeComponent();
  Loaded += (sender, args) => {
    var obj = (ViewMod)this.DataContext;
    if (obj == null || obj.Prop == null)
      return;
    var d = obj.Prop;
    if (d == null)
      return;
    grd2.Children.Add(new TextBlock { Text = d.Name });
  };
}

DataContext不是立即设置的。因此,我们使用该Loaded事件并向其添加一个 lambda 来执行相应的步骤。

边注:

即使这可行,请搜索并查看一些 MVVM 示例。虽然没有代码隐藏并不是真正的 MVVM 要求,但我认为当您可以从 xaml 中完美地完成时,添加 Grid 子项和代码隐藏中的东西有点太过分了。

于 2013-06-07T13:13:40.727 回答