2011-07-15 18 views
1

このエリアの周りにはいくつかのポストがありますが、私に役立つものはありません...シナリオは次のとおりです。範囲をシミュレートする2つの「シーズン」ドロップダウンがあります。開始範囲1でシーズンを選択した場合、ビューモードは自動的に終了範囲にバインドされたプロパティを同じシーズンに設定します(デフォルトは1年で​​、範囲ではありません)。読みやすくするための書式設定attibutes):ビューモデルでWPF MVVM Light - SelectedItemのバインディングは変更されていません

<ComboBox ItemsSource="{Binding AvailableSeasons, Mode=OneWay}" 
      SelectedItem="{Binding SelectedBeginRangeSeason, Mode=TwoWay}" 
      ItemTemplate="{DynamicResource SeasonItemShortFormat}" /> 
<ComboBox ItemsSource="{Binding AvailableSeasons, Mode=OneWay}" 
      SelectedItem="{Binding SelectedEndRangeSeason, Mode=TwoWay}" 
      ItemTemplate="{DynamicResource SeasonItemShortFormat}" /> 

プロパティ次のようになります。私は、最後のプロパティは、デバッグ文とし、ユニットテストの両方で変更されている確認した

private Season _selectedBeginRangeSeason; 
private const string SelectedBeginRangeSeasonPropertyName = "SelectedBeginRangeSeason"; 
public Season SelectedBeginRangeSeason { 
    get { return _selectedBeginRangeSeason; } 
    set { 
    if (_selectedBeginRangeSeason != value) { 
     var oldValue = _selectedBeginRangeSeason; 
     _selectedBeginRangeSeason = value; 

     RaisePropertyChanged<Season>(SelectedBeginRangeSeasonPropertyName, oldValue, value, true); 
    } 
    } 
} 

private Season _selectedEndRangeSeason; 
private const string SelectedEndRangeSeasonPropertyName = "SelectedEndRangeSeason"; 
public Season SelectedEndRangeSeason { 
    get { return _selectedEndRangeSeason; } 
    set { 
    if (_selectedEndRangeSeason != value) { 
     Debug.WriteLine("Updating property SelectedEndRangeSeason..."); 

     var oldValue = _selectedEndRangeSeason; 
     _selectedEndRangeSeason = value; 

     Debug.WriteLine("Broadcasting PropertyChanged event for property SelectedEndRangeSeason..."); 
     RaisePropertyChanged<Season>(SelectedEndRangeSeasonPropertyName, oldValue, value, true); 
    } 
    } 
} 

private void UpdateSelectedSeasonSelectors() { 
    // if the end range isn't selected... 
    if (_selectedEndRangeSeason == null) { 
    // automatically select the begin for the end range 
    SelectedEndRangeSeason = _selectedBeginRangeSeason; 
    } 
} 

、しかし、私がそれを選択するとUIが変化していない...何が起こっているのか把握することができず、このように多くの異なる方法を見てきた。

+0

[この質問](http://stackoverflow.com/questions/1605939/wpf-combobox-selecteditem-not-updating)あなたのような音。あなたはその答えを試しましたか? – RMart

答えて

1

ViewModelからイベントを発生させ、UIに通知してカレンダーを更新してみます。

2

AvailableSeasonsコレクションからSelectedSeasonを入手しましたか?そうでない場合は、シーズンを比較するために特別なことを実装しましたか?例えば

、のSelectedItemはnew Season();AvailableSeasonsに存在しないため動作しません結合SelectedSeason = new Season();場合は

<ComboBox ItemsSource="{Binding AvailableSeasons}" 
      SelectedItem="{Binding SelectedSeason}" /> 

があるとします。

SelectedItemが正しく動作するようにするには、SelectedSeason = AvailableSeasons[x]を設定する必要があります。これは、2つの項目がまったく同じになるためです。または、2つのシーズンを比較して同じかどうかを確認するカスタムメソッドを実装することもできます。通常、私はちょうど比較されるクラスのToString()メソッドを上書きします。