2011-12-03 11 views
0

私はWP7アプリケーションで作業していますが、TextBlockをプロパティにバインドする際に問題が発生しました。私はMVVMとC#の初心者ですから、何が間違っているのか分かりません。TextBlockバインディングの更新

最後にこの問題を解決しましたが、私のソリューションがなぜ機能するのか分かりません(いつでも楽しい...)ので、本当にあなたの指導に感謝します。より人間が読める記述である(

// Broken 
namespace MyApp.MyModel 
{ 
    public class MetaData : INotifyPropertyChanged 
    { 
     private StatusType status; 
     public StatusType Status 
     { 
      get { return status; } 
      set 
      { 
       status = value; 
       statusMessage = ConvertStatusToSomethingMeaningful(value); 
      } 
     } 

     private string statusMessage; 
     public string StatusMessage 
     { 
      get { return statusMessage; } 
      private set 
      { 
       statusMessage = value; 
       // This doesn't work 
       NotifyPropertyChanged("StatusMessage"); 
      } 
     } 

     ... 
    } 
} 

Statusenumあり、そしてそれは私のアプリで設定されていますとき、それはあまりにもStatusMessageを設定します:私のアプリのモデルでは

は、私はもともとこのような何かを持っていましたユーザーを表示する)。 My ViewのTextBlockStatusMessageにバインドされていますが、上記のコードを使用して更新されることはありません。

ただし、NotifyPropertyChanged("StatusMessage")Statusに移動すると、私のビューのTextBlockのように更新されるはずです。しかし、私は上記の元のコードがそうでないときになぜこれが機能するのか理解していません。この行に:)

+0

あなたは 'ConvertStatusToSomethingMeaningful'と' XAML'私たちを見ることができますか? –

答えて

1

問題の初心者を支援するため、事前に

// Fixed 
namespace MyApp.MyModel 
{ 
    public class MetaData : INotifyPropertyChanged 
    { 
     private StatusType status; 
     public StatusType Status 
     { 
      get { return status; } 
      set 
      { 
       status = value; 
       StatusMessage = ConvertStatusToSomethingMeaningful(value); 
       // This works 
       NotifyPropertyChanged("StatusMessage"); 
      } 
     } 

     public string StatusMessage { get; private set; } 

     ... 
    } 
} 

感謝:

statusMessage = ConvertStatusToSomethingMeaningful(value); 

StatusMessageセッターは(正確にそこに呼ばNotifyPropertyChanged( "StatusMessage"))と呼ばれることはありません

StatusMessage = ConvertStatusToSomethingMeaningful(value); 

は、

おそらくこのの私の実装は次のようになります。

namespace MyApp.MyModel 
{ 
     public class MetaData : INotifyPropertyChanged 
     { 
      private StatusType status; 
      public StatusType Status 
      { 
       get { return status; } 
       set 
       { 
        if (status != value) 
        { 
          status = value; 
          NotifyPropertyChanged("Status"); 
          NotifyPropertyChanged("StatusMessage"); 
        }     
       } 
      } 

      public string StatusMessage 
      { 
       get { return ConvertStatusToSomethingMeaningful(status); } 
      } 

     ... 
     } 
} 
+0

ありがとうKu6opr! >私は次回より慎重になることを忘れないでください。再度、感謝します! – Superangel

関連する問題