2009-06-16 12 views
12

私はDataTemplate私は再利用したいです。私が除外したい部分は、唯一の変更だからバインディングです。私のDataTemplateはおおよそこのように見えます。 (そこでのかなり多くは、実際のですが、私は余分なものを取り出しました。)WPFでDataTemplateのバインディングをどのように除外できますか?

<DataTemplate> 
    <TextBox Text="{Binding Name}" /> 
</DataTemplate> 

は単に私が結合していたにプロパティを変化させながら、私はこのDataTemplateを再利用できますか? (ちょうどTextBoxのような単純な場合は、私は心配しませんが、DataTemplateには実際にはStackPaneが含まれており、他の要素が多数ありますので、集中したいので、DataTemplate

私はこの問題に取り組むために2つの方法を考えました。

  1. シンプルなカスタムコントロールを作成します。それを再利用して、DataTemplateの再利用について心配しないでください。
  2. DataTemplateの何らかのサブクラスを試してみてください。 (私はこれが可能だと言われています。)私はバインドするプロパティの名前を指定することができる依存プロパティを追加したいと思います。

提案ですか?

答えて

4

私は自分自身の質問に答えるのが嫌いですが、完全性のために私の解決策があります。当然の

<ListBox ItemsSource="{Binding}"> 
    <ListBox.Resources> 
    <ControlTemplate x:Key="textBoxControlTemplate" TargetType="ContentControl"> 
     <TextBox Text="{TemplateBinding Content}" /> 
    </ControlTemplate> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <ContentControl Content="{Binding Name}" Template="{StaticResource textBoxControlTemplate}" /> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

これは非常に不自然なです。私のアプリケーションでは、実際にリストボックスの中にテキストボックスを置くわけではありません。リストボックスでは、これはあまり役に立ちませんが、DataGridの内部では、各列が同様の方法で表示され、別のプロパティにバインドされる可能性があると考えられます。

0

UserControlを作成し、DataTemplate内で使用します。

<DataTemplate> 
    <local:MyComplexUserControl DataContext="{Binding Name}"/> 
</DataTemplate> 

とユーザーコントロール内:

<StackPanel> 
    <TextBlock>Value:</Text> 
    <TextBox Text="{Binding}"/> 
</StackPanel> 

は、各機会に結合自身の持つ独立したDataTemplateを持っています。

+0

私はUserControlなしでこれを行うことができます - リソース内でControlTemplateを使用するだけです。 –

関連する問題