WPF - 组合框c#选择不会显示在活动窗口中

时间:2016-12-28 20:47:49

标签: c# wpf combobox model-binding

我在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)上有空白值。

我正在使用List&#34; SLO_PER_UCZ&#34;填充组合框。它看起来像是:

    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和其他门户网站上找到的几个解决方案(没有任何效果)。

2 个答案:

答案 0 :(得分:0)

Mechanizmy.GlobalObj.SLO_PER_UCZ是该集合。它也不是所选的值。将SelectedValue绑定到将采用所选值的其他属性。

由于您也想设置它,我还会向您展示如何在您的viewmodel上实现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,直到找出它们的含义。添加你不了解的随机内容会浪费你的时间,让你无处可去。

答案 1 :(得分:0)

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

再次感谢:)

亲切的问候 塞巴斯蒂安