【问题标题】:Implementing 2-way binding for Combobox SelectedItem in Windows Store在 Windows 应用商店中为 Combobox SelectedItem 实现 2-way 绑定
【发布时间】: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


【解决方案1】:

您需要在用于项目的类型上实现IEquatable&lt;T&gt;Tuple 没有。

【讨论】:

    【解决方案2】:

    您不能同时设置SelectedItemSelectedValuePath

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

    【讨论】:

    • 我已根据您的建议实施了更改,但仍然无法正常工作。我已更新问题代码以反映更改。
    • 不要删除DisplayMemberPath。仅删除 SelectedValuePath。需要DisplayMemberPath 在组合框中显示选定的文本。
    • 我已经用 - 仍然没有运气。
    • 嗯,您需要更新重现此问题的 samll 示例,因为这适用于我尝试过的小应用程序。
    • 你在 Win Store 中工作了吗?你能分享你的应用程序吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2012-11-01
    • 2023-04-03
    • 2011-11-01
    • 2013-11-07
    • 2015-06-28
    • 2017-04-30
    相关资源
    最近更新 更多