【问题标题】:WPF Combobox initial value being overridden by selected itemWPF Combobox 初始值被选定项目覆盖
【发布时间】:2018-04-07 13:13:51
【问题描述】:

我有以下问题:

当我的视图加载组合框时,选择的值为空。

这是我的观点的代码:

<UserControl.Resources>
    ...
    <CollectionViewSource x:Key="SpecialtiesSource" Source="{Binding Path=Specialties}" />
    ...
</UserControl.Resources>

...

<ComboBox Grid.Row="11" Grid.Column="2" Name="Specialty" Style="{StaticResource ComboBoxItem}"
          SelectedIndex="0"
          IsEditable="True"
          TextSearch.TextPath="Name"
          DisplayMemberPath="Name" 
          ItemsSource="{Binding Source={StaticResource SpecialtiesSource}}" 
          SelectedItem="{Binding SelectedSpecialty}"
          SelectedValuePath="Name">
</ComboBox>

这是我的视图模型:

private List<Specialty> _specialties;
public List<Specialty> Specialties
{
    get
    {
        return _specialties;
    }

    set
    {
            _specialties = value;
            NotifyOfPropertyChange(() => Specialties);
        }
    }

    private Specialty _selectedSpecialty;
    public Specialty SelectedSpecialty
    {
        get
        {
            return _selectedSpecialty;
        }

        set
        {
            if (value == null)
            {
                return;
            }

            _selectedSpecialty = value;
            NotifyOfPropertyChange(() => SelectedSpecialty);
        }
    }

型号:

public class Specialty : IGeneric
{
    public string Code { get; set; }
    public string Name { get; set; }
    public string TabColour { get; set; }
    public string TextColour { get; set; }
    public bool? ActiveFlag { get; set; }
}

public interface IGeneric
{
    string Name { get; set; }
}

当我调试代码时,我可以看到我的 Specialties 对象返回了正确的结果,因为当我点击下拉菜单时,我可以看到我所期望的所有结果。

然而,在它加载这个对象之后,我可以看到我的 SelectedSpecialty 对象被击中,该对象为空。我猜这是因为加载 ItemsSource 和尝试在索引位置 0 处设置 SelectedItem 的值之间的一些潜在交互?

关于如何弄清楚为什么要设置 SelectedItem 以及如何正确停止/将其设置为我的 SpecialtiesSource 的第一项的任何输入或建议?

我也不是 100% 有信心正确使用 SelectedValuePath。

【问题讨论】:

  • 只是想确保我理解。加载后您可以看到 CombBox 中的项目,但 SelectedItem 没有绑定?因此,如果您更改了选择,您的 SelectedSpecialty 仍然为空?
  • 删除 selectedvaluepath 行。 SelectedSpeciality 最初是如何设置的?您期望它不为空,因此某些内容显示为已选中。但是我没有看到任何代码可以将其设置为任何内容。所以它将为空。

标签: c# wpf xaml caliburn.micro


【解决方案1】:

绑定的 SelectedItem 从 null 开始。与 ItemsSource 相同。如果您看到一个列表,则必须在问题中未显示的某个位置初始化 Specialties,然后设置 SelectedSpecialty。

或者,如果它是在运行时加载的静态列表,请在 get for Specialties 中创建列表。然后,您可以在运行时将 SelectedSpecialty 初始化为 Specialties 项之一。

【讨论】:

    猜你喜欢
    • 2013-05-31
    • 2016-03-12
    • 2023-03-12
    • 1970-01-01
    • 2020-03-27
    • 2020-10-10
    • 1970-01-01
    • 2020-08-23
    • 2011-02-28
    相关资源
    最近更新 更多