私は最初にTreeView
を動作させようとしてきましたが、最初はViewModelがなくても動作しました。しかし、私が何をするにしても、拘束力は正しいものの、子供を示さない。WPF:TreeViewに子が表示されない
私は2つのItem
テンプレートを使用しています.1つは階層用、もう1つはデータ用です。あなたは、以下の両方のための重要な部分を見ることができます:
class GrupoTag
{
public string Nome { get; set; }
public GrupoTag Pai { get; set; }
public List<Tag> ListaFilhos { get; set; }
public List<GrupoTag> SubGrupos { get; set; }
public GrupoTag(string nome)
{
Nome = nome;
ListaFilhos = new List<Tag>();
SubGrupos = new List<GrupoTag>();
}
public List<object> Filhos
{
get
{
List<object> lista = new List<object>();
foreach (GrupoTag subGrupo in SubGrupos)
lista.Add(subGrupo);
foreach (Tag filho in ListaFilhos)
lista.Add(filho);
}
}
}
class Tag
{
public GrupoTag Pai { get; set; }
public string Nome { get; set; }
public Tag(string nome)
{
Nome = nome;
}
public Tag(GrupoTag pai, string nome)
{
Pai = pai;
Nome = nome;
}
}
XAMLは、このすべてに結合する:
<TreeView Name="MenuTags">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="xml2Excel2:GrupoTag" ItemsSource="{Binding Filhos}">
<TextBlock Text="{Binding Nome}" />
</HierarchicalDataTemplate>
<DataTemplate DataType="xml2Excel2:Tag">
<TextBlock Text="{Binding Nome}" />
</DataTemplate>
</TreeView.Resources>
</TreeView>
しかしGrupoTag
クラスのプロパティ「FILHOS」がアクセスされることはありません。私はそこに例外を投げてブレークポイントを入れようとしましたが、決して呼び出されませんでした。 TreeView
には、ItemSource
のコードビハインドとして割り当てられたGrupoTag
のコレクションの名前しか表示されません。
MenuTags.ItemsSource = arvoreTeste.SubGrupos;
関連するすべての質問を読み、それぞれのエラーのコードを修正しましたが、私はまだここで失われています。
EDIT 1:だから、私は以下のシンプルなインターフェースに準拠したクラスのコードを変更:ベナンのコメントを1として
class ITag
{
public string Nome { get; set; }
public ObservableCollection<ITag> Filhos { get; set; }
}
、GrupoTagは現在、その子を表すためにObservableCollection
に保存された単一のプロパティを使用しています。そして、Adnanの回答によれば、DataType
がXAML TreeView
から削除されました。これは次のようになります。
<TreeView Name="ArvoreTags">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<TextBlock Text="{Binding Nome}" />
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
TreeView
は機能します。しかし、私は理由を知らない。
あなたは 'のObservableCollectionを使用したいと思いますそのアイテムの更新がthに反映されるようにするeビュー。また、単純なプロパティが必要で、プロパティゲッターの外の適切な領域で操作を行います。あなたがここに持っているのは、 'Filhos'プロパティへのアクセスごとに新しいリストを生成することです。それは拘束的な悪夢です。 –
私は 'Filhos'から' SubGrupos'(いくつかのノードはこのタイプの子を持っています)へのバインディングを切り替え、すべてのプロパティのタイプを 'ObservableCollection'に変更しようとしましたが、それでも何もしませんでした。 – manoftheyear
私はどこにバインディングを指しても問題ありません。何も表示されません。一方がObservableCollectionであっても一方のコレクションまたは他のコレクションを直接指している場合は何もしません。 – manoftheyear