WPF - 组合框 c# 选择未显示在活动 window

WPF - combobox c# selection is not displayed on active window

我在 VS 2015 Express 环境中创建了一个 WPF 应用程序。现在我正在努力解决组合框值表示问题。我的组合框看起来像这样:

<ComboBox 
    x:Name="cb_pers_ucz"  
    ItemsSource="{Binding Path=Mechanizmy.GlobalObj.SLO_PER_UCZ}" 
    DisplayMemberPath="nazwa" 
    SelectedValuePath="id_poz" 
    IsSynchronizedWithCurrentItem="True" 
    SelectedValue="{Binding Mechanizmy.GlobalObj.SLO_PER_UCZ, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 
    ToolTip="" 
    HorizontalAlignment="Left" 
    Margin="175,127,0,0" 
    VerticalAlignment="Top" 
    Width="185" 
    Height="22" 
    Grid.Row="1" 
    ToolTipOpening="cb_pers_ucz_ToolTipOpening"
    />

一切正常,直到我需要通过 C# 代码设置所选值。当我使用 SelectedIndex 或 SelectedValue 属性 组合框正在将 ID 值更改为已选择但 window (GUI) 上有空白值。

我正在使用列表 "SLO_PER_UCZ" 来填充组合框。看起来像这样:

    public class slowniki
    {
        public int id_poz { get; set; }
        public string nazwa { get; set; }
        public string definicja { get; set; }
        public DateTime dt_od { get; set; }
        public DateTime dt_do { get; set; }
    }

    public static List<slowniki> SLO_PER_UCZ = new List<slowniki>();

对于 Combobox 结构的质量,我深表歉意,但我试图实施我在 Whosebug 和其他门户网站上找到的几个解决方案(没有效果)。

Mechanizmy.GlobalObj.SLO_PER_UCZ为合集。它也不能是选定的值。将 SelectedValue 绑定到另一个将采用所选值的 属性。

既然你也想设置它,我也会向你展示如何在你的视图模型上实现 INotifyPropertyChanged

public class GlobalObjClassName : INotifyPropertyChanged
{

    //  ... etc. etc. etc. ...
    public static List<slowniki> SLO_PER_UCZ = new List<slowniki>();

    private int _selectedIDPoz = -1;
    public int SelectedIDPoz
    {
        get { return _selectedIDPoz; }
        set
        {
            if (value != _selectedIDPoz)
            {
                _selectedIDPoz = value;
                OnPropertyChanged();
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] String propName = null)
        => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));

XAML:

<ComboBox 
    x:Name="cb_pers_ucz"  
    ItemsSource="{Binding Path=Mechanizmy.GlobalObj.SLO_PER_UCZ}" 
    DisplayMemberPath="nazwa" 
    SelectedValuePath="id_poz" 
    IsSynchronizedWithCurrentItem="True" 
    SelectedValue="{Binding Mechanizmy.GlobalObj.SelectedIDPoz}" 
    ToolTip="" 
    HorizontalAlignment="Left" 
    Margin="175,127,0,0" 
    VerticalAlignment="Top" 
    Width="185" 
    Height="22" 
    Grid.Row="1" 
    ToolTipOpening="cb_pers_ucz_ToolTipOpening"
    />

并且在您弄清楚它们的含义之前不要使用 UpdateSourceTrigger=PropertyChangedMode=TwoWay。随意添加你不理解的东西只会浪费你的时间,让你一事无成。

非常感谢您的回答。这不是对我的问题的严格回答,但给了我足够的信息来解决问题。

再次感谢:)

亲切的问候 塞巴斯蒂安