我有一个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;
}
不确定这是否有帮助。 感谢