2

私は今、WPF の領域に入ったところです。カスタム コントロールを作成したいと思います。スタイルは気にしすぎず、機能性重視です。

他の WPF アプリケーションがこのコントロールを使用し、このデータをユーザーに公開し、フィードバックを簡単に取得できるように、別のライブラリからのデータで自動的にいっぱいになるカスタム ツリー ビューを作成しようとしています。

いいえ:

+-----------------------------+
|+Project                     |
|+-- File                     |
|+---- Patch                  |
|+Other Project               |
|+-- Files Are Nifty          |
|+---- Yup.                   |
+-----------------------------+

私は ^​​that^ を、すべてのインスタンスで常に同じデータを持つ再利用可能なコントロールにしたいと考えています。基本的に、デフォルトのデータバインディングです。私は少しグーグルで検索しましたが、ここで検索しましたが、すべての質問/回答は関連性がないか、頭に浮かんでいたか、またはその両方でした。私が見つけた唯一の有用な情報は、データ プロバイダーで 2 つのブランチを持ち、CompositeCollection を返すことでした。

誰かがこれを WPF カスタム コントロール ライブラリについて順を追って説明できれば、とてもありがたいです。

4

1 に答える 1

0

データが常に同じパターンである場合 (たとえば、プロジェクトにファイルがあり、パッチがあるファイルがある場合)、必ずしも CompositeCollection は必要ありません。HierarchicalDataTemplates を使用して、次のようにデータを表示することもできます。

    <HierarchicalDataTemplate x:Key="ProjectTemplate"
ItemsSource="{Binding ChildCollection}"
ItemTemplate="{StaticResource FileTemplate}">
        <here comes the actual TreeViewItem of this Template>
    </HierarchicalDataTemplate>

あなたの FileTemplate は別の HierarchicalDataTemplate です。これは、最下位レベルに到達するまで続きます。これは DataTemplate になります。これらのテンプレートはすべてリソースに配置されます。あとは、TreeView の ItemTemplate を最上位の HierarchicalDataTemplate (ProjectTemplate) に設定するだけです。

                    <TreeView ItemsSource="{Binding Path=ChildCollection, UpdateSourceTrigger=PropertyChanged}" ItemTemplate="{StaticResource ResourceKey=ProjectTemplate}">
                    </TreeView>

データは次のようになります。

public class Project
{
     public ObservableCollection<File> ChildCollection {get;set;}
}

File には別の ChildCollection があります (例: ObservableCollection<Patch>) aso
デフォルトの DataContext を設定するには、コンストラクターで DataContext を Type の ChildCollection を持つ ViewModel に設定できますObservableCollection<Project>

于 2013-06-18T06:54:07.287 に答える