【发布时间】:2014-01-06 07:32:00
【问题描述】:
我对 Windows 应用商店应用中的 Combobox 绑定有一个小问题。它必须绑定到本地化的枚举值(枚举名称是 BackgroundTrack)。我在视图模型中有 2 个属性 - 项目列表和选定项目。我使用 Tuple 来保存枚举值及其本地化字符串表示。
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>
ViewModel 构造函数:
BackgroundTrackList = EnumUtils.GetLiterals<BackgroundTrack>();
SelectedBackgroundTrack = BackgroundTrackList.First(t => t.Item1.Equals(_settingsService.BackgroundTrack));
问题:我正在 ViewModel 构造函数中设置选定项(来自应用程序设置),但此值未显示在组合框中 - 它没有任何选择。如果我在组合框中选择某些内容,则绑定可以正常工作并设置底层 ViewModel 属性。我该如何纠正这个问题?我是否需要以编程方式实现 INotifyPropertyChanged 或延迟所选项目属性的设置?
【问题讨论】:
-
确保在被击中时 SelectedItem 属性的 getter,您的 ItemsSource 已加载,否则您必须实现 INPC 并引发事件以通知 UI SelectedItem 的属性已更改。
-
我已经实现了 INPC,我在构造函数中点击了 setter,提高了属性。仍然组合框在开始时有空选择。 (问题已更新)
标签: c# .net wpf xaml winrt-xaml