2011-01-04 32 views
0

私はWP7のMVVMに関する質問があります。私のアプリケーションでは、もしあなたが日付ピッカーやカレンダーのようなものを持っています。だから1日を選んだ後、その日の情報を編集して別のページに移動することができます。奇妙なRaisePropertyChangedの振る舞い

いくつかの情報を変更して戻るボタンをクリックすると、変更された情報がcorrespondingpongindバインディングで更新されていないという問題があります。そのため、navigatedtoイベントでは、そのページのVMからパブリックメソッドを呼び出します。このメソッド(RefreshSelectedDay)の唯一の目的は、RaisePropertyChangedを呼び出して、ページ上のバインドされたテキストフィールドに新しい情報が得られるようにすることです。しかし、何も起こらない。この情報は、MyDayクラスのインスタンスであるSelectedDayプロパティのactaullyプロパティです。

protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     ViewModel.ViewModelLocator.CalendarStatic.RefreshSelectedDay(); 
    } 

    /// <summary> 
    /// I admit that this is by far the most stupid solution so far. 
    /// RaisePropertyChanged won't work if you haven't really changed the property. 
    /// That's why we set it to null and then turn it back. 
    /// Used for updating the day when returning from 
    /// the edit screen. 
    /// </summary> 
    public void RefreshSelectedDay() 
    {    
     MyDay w = selectedDay; 
     SelectedDay = null; 
     SelectedDay = w; 
    } 

私の解決策は、エレガントではありません。 IMOは、RaisePropertyChangedを呼び出すと、同じ変数でそのプロパティのうちの1つだけが変更されたため、伝播しません。誰かが何が起きているのかを説明できるのは素敵でしょう。

+0

MVVMのフレームワークを使用していますか?もしそうなら、どちら? –

+0

このプロジェクトのMVVM-Light – Miro

答えて

0

"問題は、情報を変更して戻るボタンをクリックすると、変更された情報が対応するバインディングで更新されていないことです。 おそらくが変更されたという情報は、が実際にを変更しなかったことを私に暗示

。それはまたあなたがなぜRefreshSelectedDayもうまくいかないような理由を説明します。

SelectedDayのプロパティを変更していますか、または新しいインスタンスを作成していて、それが設定されていませんか?

プロパティをSelectedDayに変更している場合は、そのクラスがプロパティの変更通知を適切に発行しますか?

多くのコードはデバッグにも役立ちます。

+0

まあ、私はこれを数回チェックして、それが変更されます。 selectedDay変数には、その中に新しい情報があります。 MyDayは私のアプリケーションのモデルなので、そのプロパティはプロパティの変更通知を起動しません。ただし、SelectedDayはSelectedDayのプロパティにバインドされたテキストブロックがあるグリッドのdatacontextとして使用されます。その場合、RaisePropertyChangedはdatacontextが変更されたことを通知し、textblocksを再バインドする必要があります。 – Miro

+0

それは本当です、彼らはすべきです。それ以上のコードなしで私は何もobvoiusを見ません... –