2011-12-21 8 views
1

カスタムプロパティを作成して、コードの背後にある値にバインドすることは可能ですか?私が何をしたいかカスタムスタイルプロパティ - XAML

<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle"> 
     <Setter Property="IsEditable" Value="{Binding IsEditable, Mode=TwoWay}" /> 

     <Style.Triggers> 
      <Trigger Property="IsEditable" Value="True"> 
       <Setter Property="HeaderTemplate" Value="{StaticResource EditableTextBox}" /> 
      </Trigger> 

     </Style.Triggers> 
    </Style> 

はPersonViewModelクラスに設定されているisEditableをの値に応じてNotEditableTextとEditableTextテンプレート間のスワップです。しかし、私は本当にすべてを束ねる方法ではありません。

SOLUTION

<Style TargetType="{x:Type TreeViewItem}" x:Key="ContainerStyle"> 
     <Setter Property="ViewModel:PersonViewModel.IsEditable" Value="{Binding IsEditable, Mode=TwoWay}" /> 

     <Style.Triggers> 
      <Trigger Property="ViewModel:PersonViewModel.IsEditable" Value="True"> 
       <Setter Property="HeaderTemplate" Value="{StaticResource EditableText}" /> 
      </Trigger> 
     </Style.Triggers> 

    </Style> 
+0

あなたは何をしたいのか説明してください。あなたのxamlはまったく役に立たず、私はあなたの質問を理解していません。カスタム依存関係プロパティにバインドできますか?もちろん。コードでバインディングを使用できますか?もちろん。既存のクラスに依存プロパティを追加できますか?種類、添付されたプロパティを検索します。私は推測を続けることができます... – dowhilefor

答えて

0

が、あなたの財産はDependancyPropertyでなければなりません。それ以外の場合は、Bindingイベントに応答しません。 DependancyPropertyの追加は非常に簡単です。

public static readonly DependencyProperty IsSpinningProperty = 
    DependencyProperty.Register(
    "IsSpinning", typeof(Boolean), 
    ); 

public bool IsSpinning 
{ 
    get { return (bool)GetValue(IsSpinningProperty); } 
    set { SetValue(IsSpinningProperty, value); } 
} 

このようなプロパティを作成したら、シナリオで説明したようにStyle.Triggersで使用できます。 あなたのプロパティは、TargetType="{x:Type MyType}"で使用されるクラスに存在する必要があります。

+0

私はまだトリガーでエラーが発生しています: タイプ 'System'でスタイルプロパティ 'IsEditable'を見つけることができません。 Windows.Controls.TreeViewItem '。 – WaZz

+0

TreeViewItemクラスにIsEditableプロパティがないためです。このクラスを継承しましたか?コードがSystem.Windows.Controls.TreeViewItemの型を指しています。エラーは論理的です。 –

+0

XAMLですべてのスタイルを設定し、IsEditableプロパティでtrueまたはfalseを設定するだけで、XAMLは適切なテンプレートを選択します。これを達成することは可能ですか? – WaZz

0

あなただけのコードを介して、このスタイルを設定する必要がある場合は、あなたが使用することができます:はい

Style containerStyle = (Style)FindResource("ContainerStyle"); 
this.someTreeView.Items[0].Style = containerStyle;