2017-02-08 14 views
0

静的クラス内で、フレームのSourceプロパティにバインドした静的プロパティがあります。これはOneWayバインディングです。バインディングは初めて正しく動作しますが、プロパティが変更されたときにターゲットは更新されません。これは私のXAMLで静的プロパティへの片方向バインディングは、ソースが変更されたときにターゲットを更新しません。

<Frame x:Name="frmMain" Source="{Binding Source={x:Static currentPage:ActivePages.MainFramePage}, NotifyOnTargetUpdated=True,Mode=OneWay}"/> 

これは私の静的クラスActivePages.cs 私はthis linkanother link
どのように私はそれを更新しない、ソースの変更を踏襲

public static class ActivePages 
    { 
     private static Uri mainFramePage; 
     public static Uri MainFramePage 
     { 
      get { return mainFramePage; } 
      set 
      { 
       mainFramePage = value; 
       MainFramePageChanged?.Invoke(null, new PropertyChangedEventArgs("MainFramePage")); 
      } 
     } 
public static event EventHandler<PropertyChangedEventArgs> MainFramePageChanged; 
} 

あります?

答えて

0

それはWPF 4.5以上である場合は、Pathプロパティを使用することができます。

<Frame x:Name="frmMain" Source="{Binding Path=(local:ActivePages.MainFramePage), NotifyOnTargetUpdated=True,Mode=OneWay}"/> 
0

MSDN pageによる静的プロパティ変更イベントの署名が

public static event EventHandler MyPropertyChanged; 

または

public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged; 
のいずれかであります

あなたの名前は

public static event EventHandler MainFramePageChanged; 

代わりの

public static event EventHandler<PropertyChangedEventArgs> MainFramePageChanged; 

あなたが複数の静的な性質を持っている場合は、あなたがより良いプロパティ名の情報を提供PropertyChangedEventArgsで一つのイベント

public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged; 

を使用する必要があります。あなたはまた、バインディング式の構文を使用する必要があり


Source="{Binding Path=(currentPage:ActivePages.MainFramePage)}" 

静的プロパティ変更通知の詳細についてもthis blog postを参照してください。

+0

ブログのリンクにアクセスできません。ソースを指定する構文でフレームソースが読み込まれない – Mavil

+0

いいえ、リンクが壊れているようですが、一時的なものかもしれません。バインディング式の構文は、古いWPFバージョンでは機能しない可能性があります。どのバージョンを使用していますか?また、この答えを見てみることもできます:http://stackoverflow.com/a/41823852/1136211 – Clemens

+0

もちろん、バインディングパスは 'local:ActivePages.MainFramePage'ではなく、' currentPage:ActivePages.MainFramePage'でなければなりません。 – Clemens

関連する問題