可変バインディングパス

私は技術的なアプリケーションのメモリダンプを表示する必要があります。追加の情報を表示するには、各バイト(セル)をDataTemplateで定義する必要があります(背景色、個々のツールチップなどを設定して強調表示)。私は次の試みをしました:

  
    
      [...]
      
        
          
            
              [...]
            
          
        
      
    
  

The final result should look like this:
Dump example

My problem is the fix coded Binding path. 'Cell' is a list of objects that holds all necessary information to display the cell. Using this approach, I need to define 16 times the same DataTemplate with Cell[0] to Cell[15]. I definitely want to avoid this!
I read an approach defining the DataTemplate in source code where I assemble the XAML in a string and call Markup.XamlReader.Load(MemoryStreamOfTheString). But here I lose the comfort of the Visual Studio IDE.
Is it possible to define the DataTemplate in XAML and make the indexer of the Cell-Object a parameter?

0

4 答え

あなたは読んだようにすべきです:XamlReaderを使ってテンプレートを動的に作成します。 XAMLエディタを快適に使用するには、テンプレートを次のように別々のxamlファイルに定義します。


    
        <!--Your template controls goes here.-->
    

次に、このファイルのタイプをResourceに設定して文字列にロードし、ビューを構築するときに文字列からテンプレートをロードする前に、単にCurrent_Cellを個々のセル番号に置き換えます。 グリッドのDataContextを設定することで、テンプレート内で他のバインディングを使用する手助けをします(コンテキストはすでに現在のセルに設定されており、どこにでも置き換える必要はありません)。

私は最近同じ状況にありました。違いは、グリッドには完全に動的な列(サーバーからロードされた列)があったため、16個のテンプレートを作成する機会もありませんでした:)

2
追加された
+1(単純な)アイデアを別のXAMLにエクスポートしてIDEの快適性を持たせる。私が言及していないことは、あなたが持っていたように、分かりませんでした。ここでの共通のメモリレイアウトの図は、SOの質問を単純化することに過ぎませんでした。 (質問が複雑すぎる場合は、回答は得られません)。
追加された 著者 Markus,
私はこれが私の場合に行きたいと思う方法だと思う。私がここで読んだ限り( support.microsoft.com/kb/319292 )、 Embedded Resourceに設定する必要があります。
追加された 著者 Markus,

添付行動のパターンを試してみることができます。添付されたプロパティを列番号にバインドすると、添付されたビヘイビアによって列番号が指定された必要なセルにテキストがバインドされます。

1
追加された
非常に興味深いリンク+1。もう少し考えてみたい。
追加された 著者 Markus,

ListBoxで試してみてください。

外側のListBoxには、ListBoxである行も含まれ、それぞれがListオブジェクトにバインドされます。また、ListBoxItemのDataTemplateを作成することもできます。


    [...]
    
    [...]



    
        
    

あなたがこのコントロールを置くことを望むときはいつでも:


コードの背後にある:

public class ListOfCells { public List Cells {get; set; } }

public List CellsList {get; private set; }
1
追加された
そして、outerListBoxItemsリストItemsPanelを水平に整列されたStackPanelを持つテンプレートに設定することを忘れないでください
追加された 著者 Miklós Balogh,
ああ!はい、もちろん。内側のListBoxは、セルのリストを反復処理できます。新しいアイデアをありがとう。
追加された 著者 Markus,

カスタムヘッダーとセルテンプレートを使用して単一の列のDataGridを使用することをお勧めします。 あなたグリッドは個々のセルのサイズを変更することで恩恵を受けることはありませんか?ヘッダーには固定数の列があります。セルテンプレートはListControlのサブクラスとして実装できます。StackPanelの向きを垂直から水平に変更するだけです。次に、バインドされたオブジェクトは、ListControlから派生したセルコントロールとして簡単なバイトのコレクションになります。

それが意味をなさない場合はお知らせください。

0
追加された