我在Windows應用商店應用中的Combobox綁定中遇到了一個小問題。它必須綁定到本地化的枚舉值(枚舉名稱是BackgroundTrack)。我在視圖模型中有兩個屬性 - 項目列表和選定的項目。我使用Tuple <>來保存枚舉值及其本地化的字符串表示。在Windows應用商店中爲Combobox SelectedItem實現雙向綁定
物業所選的項目,VM:
public Tuple<BackgroundTrack, String> SelectedBackgroundTrack
{
get
{
return _selectedBackgroundTrack;
}
set
{
if (_selectedBackgroundTrack == null ||
_selectedBackgroundTrack.Equals(value))
{
_selectedBackgroundTrack = value;
_settingsService.BackgroundTrack = value.Item1;
RaisePropertyChanged("SelectedBackgroundTrack");
}
}
}
物業項目列表中的VM:
public IEnumerable<Tuple<BackgroundTrack, String>> BackgroundTrackList { get; set; }
組合框綁定:
<ComboBox
ItemsSource="{Binding Path=BackgroundTrackList}"
SelectedItem="{Binding Path=SelectedBackgroundTrack, Mode=TwoWay}"
Grid.Row="10" ItemTemplate="{StaticResource DataTemplate1}"
/>
<DataTemplate x:Key="DataTemplate1">
<Grid>
<TextBlock Text="{Binding Item2}"/>
</Grid>
</DataTemplate>
視圖模型構造:
BackgroundTrackList = EnumUtils.GetLiterals<BackgroundTrack>();
SelectedBackgroundTrack = BackgroundTrackList.First(t => t.Item1.Equals(_settingsService.BackgroundTrack));
問題:我在ViewModel的構造函數中設置了選定的項目(從應用程序設置),但是這個值不顯示在組合框中 - 它沒有任何選擇。如果我在combobbox中選擇了一些東西,綁定就能正常工作並設置底層的ViewModel屬性。我如何糾正這個問題?我是否需要實現INotifyPropertyChanged或以編程方式推遲所選項目屬性的設置?
確保獲得SelectedItem屬性時,您的ItemsSource被加載,否則你必須實施INPC和引發事件通知UI屬性已更改SelectedItem。 –
我已經實現了INPC,並且我在構造函數中觸發了setter,將屬性更改。仍然組合框在開始時有空的選擇。 (問題已更新) – Cortlendt