1

私はTreeView私のデータクラスのリストにバインドしています。実際、私はJSONデータを使用しており、それからListを作成しています。DataTemplateまた、 inTreeViewを保持するinImageTextBlockinを定義しますStackPanel。しかし、プロジェクトを実行すると、必要に応じてテキストのみが表示され、画像は表示されません。次に、宣言/定義を使用してDataTemplatefromTreeView.ItemTemplateを転送しましたが、何も表示されません。そして、私は得始めますUserControl.ResourcesDataType

System.Windows.Data Error: 40 : BindingExpression path error: 'IconImage' property not found on 'object' ''TVDataStructure' (HashCode=32882480)'. BindingExpression:Path=IconImage; DataItem='TVDataStructure' (HashCode=32882480); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource')

TVDataStructurehasIconImageおよびHeader名前付きのパブリック プロパティに転送DataTemplateするとTreeView.ItemTemplate、適切にバインドされず、ヘッダー オブジェクトと同じmy DataStructurehasとして名前が表示されるだけだと思います。HeaderTreeViewItem's

XAML コード

 <UserControl.Resources>
    <DataTemplate x:Name="TVIDataTemplate" DataType="{x:Type sotc:TVDataStructure}" >
        <StackPanel Orientation="Horizontal">
            <Image Name="IconHolder" Source="{Binding Path=IconImage}"/>
            <TextBlock Name="LabelHolder" Text="{Binding Path=Header}"/>
        </StackPanel>
    </DataTemplate>
</UserControl.Resources>
<Grid>
    <TreeView x:Name="tvMain" Height="Auto" Width="Auto" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" />
</Grid>

コードビハインドでは、これを行うだけです

 treeView_Expand(sender, e) {
   ...
   t.ItemsSource = ds;
 }

JSON 文字列を呼び出して foreach を実行し、計算を行って List を作成し、(ds) を ItemsSource に割り当てるだけです。

オンデマンドで編集

public class TVDataStructure
{
    public string Header;
    public object Tag;
    public ImageSource IconImage;
    public bool DoEvent = false;

    public override string ToString()
    {
        return Header;
    }
}

ご協力いただきありがとうございます。

4

1 に答える 1

1

たとえば、パブリックフィールドのプロパティを作成する必要があります

public string Header { get, set; }

それでおしまい...

また、テンプレートが見つからない場合、WPF は TextBlock を自動的に作成し、返された文字列ToString()が表示されるため、テキストはいずれかのバージョンで正しく表示されます。

ツリーをItemTemplate再度明示的に設定してコードを再構築します。

于 2013-05-22T12:47:19.883 に答える