在Windows应用商店中为Combobox SelectedItem实现双向绑定

时间:2013-12-18 08:10:32

标签: c# .net wpf xaml winrt-xaml

我在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或延迟选择项属性的设置?

2 个答案:

答案 0 :(得分:1)

您需要在用于该项目的类型上实现IEquatable<T>Tuple没有。

答案 1 :(得分:0)

您无法同时同时设置SelectedItemSelectedValuePath

如果您使用的是SelectedItem,remove SelectedValuePath,它将按预期工作。