2010-12-11 12 views
0

添付された動作に問題があります。 Dependency PropertyにBindingを提供したいが、ViewModelが初期化されるまで値がわからないので、Setterは失敗する。静的クラスで定義された添付プロパティが機能しない

現在、私はこのコードを持っている:

  <Style TargetType="{x:Type visi:Chart}"> 
       <Setter Property="att:ChartBehaviour.ExecuteCommandOnDoubleClick" Value="true"/> 
       <Setter Property="att:ChartBehaviour.ShowHideCommand" Value="{Binding OverviewHideCommand}"/> 
      </Style> 

最初のセッターは完全に正常に動作しますが、OverviewHideCommandは使用できなくなりますように、第2の1が、ない(すなわちの時点でnullです。スタイルのアプリケーション)を作成します。

これを回避する方法についてのあらゆる指針はありますか?可能であればxamlにとどまりたいです。

編集:

問題がapperently(クラスがXAML自体とは異なる名前空間にあるが、XAMLは、名前空間を参照)添付プロパティとして定義されるShowHideCommandの定義である:

public static class ChartBehaviour 
{ 
    public static readonly DependencyProperty ShowHideCommandProperty = 
     DependencyProperty.RegisterAttached("ShowHideCommand", 
              typeof(ICommand), 
              typeof(Chart), 
              new PropertyMetadata(new DefaultCommand())); 
} 

興味深いことに、プロパティがChartクラスに表示されていません。どのように私はそれに表示されるための定義を変更する必要がありますか?

答えて

0

私はこの問題を解決しました。実際には2つの問題がありました。

最初に、添付プロパティがChartで定義されていますが、ChartBehaviourではありません。

その後、正しく解析され、開始されました。そして、第二の問題は上がって - 私は次のように指定されたイベント:var obj = e.OriginalSource as Visifire.Charts.Chart;

static void OnMouseDoubleClick(object sender, RoutedEventArgs e) 
{ 
    var obj = e.OriginalSource as Visifire.Charts.Chart; 

    if (obj == null) 
     return; 

    GetShowHideCommand(obj).Execute(null); 
} 

を問題は、この行でした。グラフは非常に複雑なオブジェクトなので、e.OriginalSourceBorder要素(またはダブルクリックした場所に応じたもの)を返します。正しいメンバーはSourceで、これはChart自体です(イベントがチャートコントロールのレイヤーに吹き出た後)。

1

適切な名前のTriggerクラスを使用してセッターをトリガーできます。トリガー(と同様に動作するが、INotifyPropertyChangedを実装する非依存プロパティで動作するDataTrigger)を使用して、特定の値のプロパティを監視し、値が与えられた値に変更された場合、一連のセッターを制定できます。

これを簡単に実行するには、「バックインオブジェクト」プロパティを監視してnull以外の値に設定するデータトリガーを使用する方法があります。これが起こると、あなたのセッターが適用されるはずです。

+0

あなたはDataTriggerでの等価としか比較できないので、nullと比較するのは難しいでしょう: - /私はカスタムバインディングクラスを見つけましたが、それは少し上にあるようです。 – Femaref

+0

カスタムコンバーター?それは実際には本当に一般的です。私は重量のあるWPFアプリケーションで作業していますが、最も一般的なコンバーターのいくつかは、可視性にブール値であり、NULL(反転パラメーターで)などではありません。 – Brandyn

関連する問題