DataContext UserControl与父子控件

时间:2013-05-30 11:40:22

标签: c# wpf user-controls

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

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

我是MVVM的新手,因此没有什么问题可以抓住概念。所以请尽可能使用简单的语言:)。

编辑:我刚发现这个WPF datacontext parent / child usercontrols但是,这对我不起作用,因为我的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 of out of it并传递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;
}

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

0 个答案:

没有答案