【问题标题】:WPF - combobox c# selection is not displayed on active windowWPF - 组合框 c# 选择不显示在活动窗口上
【发布时间】:2016-12-28 20:47:49
【问题描述】:

我在 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 值更改为选中但窗口(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 结构的质量,我很抱歉,但我正在尝试实施我在 stackoverflow 和其他门户网站上找到的几种解决方案(没有效果)。

【问题讨论】:

    标签: c# wpf combobox model-binding


    【解决方案1】:

    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,直到您了解它们的含义。添加你不理解的随机内容只会浪费你的时间,让你无处可去。

    【讨论】:

      【解决方案2】:

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

      再次感谢:)

      亲切的问候 塞巴斯蒂安

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-08
        相关资源
        最近更新 更多