我在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绑定:
<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构造函数中设置了所选项目(来自应用程序设置),但此值未显示在组合框中 - 它没有选择任何内容。如果我在combobbox中选择了某些内容,则绑定可以正常工作并设置基础ViewModel属性。我该如何解决这个问题?我是否需要以编程方式实现INotifyPropertyChanged或延迟选择项属性的设置?
答案 0 :(得分:1)
您需要在用于该项目的类型上实现IEquatable<T>
。 Tuple
没有。
答案 1 :(得分:0)
您无法同时同时设置SelectedItem
和SelectedValuePath
。
如果您使用的是SelectedItem,remove SelectedValuePath
,它将按预期工作。