1

我有一个用户控件,它使用另一个用户控件作为控件之一,父 UC 有 2-3 个按钮和文本框作为其他控件。现在我通过我的编码在使用 DataContext 的子用户控件中设置 TreeView。它工作正常,但是当我在父 userControl 上添加 DataContext 时,现在子用户控件给出了 TreeViewItem 的 DataContext 是“父类型”的错误,因此无法解析为子 DataContext 类型。

我们该如何解决这个问题。我相信当我在子节点上显式设置 DataContext 时,它不应该被父节点的数据上下文覆盖。

我是 MVVM 的新手,因此在掌握概念方面几乎没有问题。所以请尽可能使用简单的语言:)。

编辑:我刚刚找到了这个WPF 数据上下文父/子用户控件但是,这对我不起作用,因为 TreeView 的 DataContext 并不是真正的 ViewModel,而是我在编写它时使用的自定义类。我不想在这个开发阶段重写完整的 ViewModel,因为我的控件与项目的其余部分非常隔离。

编辑2:

家长控制的来源

public partial class ucProjectScreen : UserControl, ITabbedWindow
{
  ProjectScreenViewModel p = new ProjectScreenViewModel();

  public long ProjectID { get; set; }
  public ucProjectScreen()
  {
    InitializeComponent();
    this.TabName = "NoProject";
    this.TabTitle = "Project #";
    this.IsAllowRefresh = false;
    this.DataContext = p;
  }

  ...
}

共享 Child 的 DataContext 有点棘手,因为在我的 usercontrol 代码后面,我使用 Treeview Expand 功能,然后从服务器获取 Json 字符串并从中创建一个 List 并通过 Itemsource 属性。

var Data = VSCommon.FetchFromWeb(URL);
List<InfoStructure> s = new List<InfoStructure>();
s = JSON.Deserialise<List<InfoStructure>>(Data);

if (s.Count > 0)
{
  List<TVDataStructure> ds = new List<TVDataStructure>();

  foreach (InfoStructure d in s)
  {
    TVDataStructure t1 = new TVDataStructure()
    {
      Header = d.Name,
      Tag = d,
      DoEvent = ((d.Type == "Directory" || d.Type == "Partition") ? true : false)
    };

    if (d.Type == "Directory" || d.Type == "Partition")
      t1.IconImage = IconReader.ToImageSource(IconReader.GetFolderIcon(IconReader.IconSize.Small, IconReader.FolderType.Closed));
    else
      t1.IconImage = IconReader.ToImageSource(IconReader.GetFileIcon(d.Name, IconReader.IconSize.Small, false));

    ds.Add(t1);
  }

  if (tds != null)
    tds.Children = ds;

  t.ItemsSource = ds;
}

不确定这是否有帮助。谢谢

4

0 回答 0