我一直在搞東西,在後面的代碼工作,但當我嘗試綁定到MVVM,沒有顯示。首先,我將展示代碼,然後展示MVVM(同樣的xaml)。我想使用MVVM,而不是後面的代碼。作品背後的代碼,但MVVM不
代碼背後(的作品):
var loadOp = ctx.Load<GateBlox.Web.Models.Structure>(ctx.GetStructuresQuery());
loadOp.Completed += (s, e) => { _treeView.ItemsSource = loadOp.Entities.Where(struc => !struc.StructureParentFK.HasValue); };
XAML
<Grid x:Name="LayoutRoot">
<sdk:TreeView x:Name='_treeView' DataContext='{StaticResource ViewModel}'>
<sdk:TreeView.ItemTemplate>
<sdk:HierarchicalDataTemplate ItemsSource='{Binding Children}'>
<TextBlock Text='{Binding StructureName}' />
</sdk:HierarchicalDataTemplate>
</sdk:TreeView.ItemTemplate>
</sdk:TreeView>
</Grid>
MVVM(犯規綁定)
private LoadOperation<Structure> _loadStructures;
private StructureContext _structureContext;
private IEnumerable<Structure> _structures;
public IEnumerable<Structure> Structures
{
get { return this._structures; }
set { this._structures = value; RaisePropertyChanged("Structures"); }
}
public StructuresViewModel()
{
if (!DesignerProperties.IsInDesignTool)
{
_structureContext = new StructureContext();
_loadStructures = _structureContext.Load(_structureContext.GetStructuresQuery().Where (p=> ! p.StructureParentFK.HasValue));
_loadStructures.Completed += new EventHandler(_loadStructures_Completed);
}
}
void _loadStructures_Completed(object sender, EventArgs e)
{
this.Structures = _loadStructures.Entities;
}
感謝阿卜杜勒 - 你的代碼工作,雖然我必須說我不知道爲什麼。我的結構表是自引用的 - 這個XAML會綁定到孫子嗎? – Greg 2011-06-08 17:38:18
你的代碼沒有工作,因爲你沒有指定你的'TreeView'的ItemsSource是什麼。如果你指定TreeView應該顯示「Structures」,那麼在你的代碼中沒有任何地方。我只是添加了('ItemsSource =「{Binding Structures}」')。 – AbdouMoumen 2011-06-08 17:52:42
好的 - 但是如果你看看我的第二篇文章,我確實指定了樹視圖的ItemSource,結果是樹視圖沒有顯示子節點。 – Greg 2011-06-08 18:20:04