2017-03-21 12 views
1

へのオブジェクトのリストを結合:ここは、私は、オブジェクトのリストを持っていると私はWPFのTreeViewコントロールにバインドしようとしているツリービュー

private List<SlideIssue> slideIssuesList = new List<SlideIssue>(); 

XAML:

<Grid Grid.Row="2"> 
    <TreeView x:Name="mainTreeView" BorderThickness="0"> 

    </TreeView> 
</Grid> 

そして、バインディングの試み:実行時に

TreeViewItem item = new TreeViewItem(); 
item.HeaderTemplate = headerTemplate; 

foreach (var issue in slideIssuesList) 
{ 
    if (slideNumber == issue.SlideNumber) 
    {            
     TreeViewItem child = new TreeViewItem(); 

     child.ItemsSource = slideIssuesList; 

     child.HeaderTemplate = itemTemplate; 
     item.Items.Add(child); 
    } 
} 
item.IsExpanded = true; 
mainTreeView.Items.Add(item); 

、これは私が得るものです:

Here is the picture

"SlideIssue"オブジェクトの特定のプロパティにアクセスしたいと思います。それ、どうやったら出来るの?

+0

SideIssueにpublicプロパティがあるかどうかを確認します。パブリックプロパティのみがツリービューに表示されます – TheUknown

+0

これらはすべて公開されています。 – fairly99

答えて

1

あなたのSlideIssueタイプにDataTemplateを定義し、クラスのpublicプロパティのいずれかにテンプレート内の任意の要素を結合することができる:中SlideIssueクラスnamespaceの名前に

<TreeView x:Name="mainTreeView" BorderThickness="0" 
        xmlns:local="clr-namespace:WpfApplication1"> 
    <TreeView.Resources> 
     <DataTemplate DataType="{x:Type local:SlideIssue}"> 
      <StackPanel> 
       <TextBlock Text="{Binding SlideNumber}" /> 
       <TextBlock Text="{Binding SomeOtherPropertyOfSlideIssue}" /> 
      </StackPanel> 
     </DataTemplate> 
    </TreeView.Resources> 
</TreeView> 

変更 『WpfApplication1』が定義される。

ちょっとした作品です。しかし、私はC#で複雑なテンプレートを作成していますので、そこから作成することをお勧めします。私は1つの問題しか持っていません:このコードをC#に書くのを手伝ってもらえますか?

プログラムでDataTemplateを作成する最も簡単かつ好ましい方法はXamlReader.Parseメソッドを使用することです:

DataTemplate dataTemplate = System.Windows.Markup.XamlReader.Parse("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:local=\"clr-namespace:WpfApplication1;assembly=WpfApplication1\" DataType=\"{x:Type local:SlideIssue}\"><StackPanel><TextBlock Text=\"{Binding SlideNumber}\" /><TextBlock Text=\"{Binding SomeOtherPropertyOfSlideIssue}\" /></StackPanel></DataTemplate>") as DataTemplate; 

ちょうどであなたのSlideIssue名前空間とアセンブリの実際の名前で「WpfApplication1」を置き換えることを忘れないでくださいをクラスが定義されています。

+0

これはちょっとした作品です。しかし、私はC#で複雑なテンプレートを作成していますので、そこから作成することをお勧めします。私は1つの問題しか持っていません:このコードをC#に書くのを手伝ってもらえますか? ありがとうございます! – fairly99

+0

'DataTemplate'をプログラムで作成する最も簡単で好ましい方法は' XamlReader.Parse'メソッドを使うことです。例については私の編集された答えを参照してください。 – mm8

1

SlideIssueクラスのToString()メソッドをオーバーライドする必要があります。 ToString()メソッドを呼び出してデータを印刷するようにオブジェクトをバインドすると、ToString()がオーバーライドされていなければ、参照クラス名が印刷されます。

関連する問題

 関連する問題