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=PropertyChanged
或 Mode=TwoWay
。随意添加你不理解的东西只会浪费你的时间,让你一事无成。
非常感谢您的回答。这不是对我的问题的严格回答,但给了我足够的信息来解决问题。
再次感谢:)
亲切的问候
塞巴斯蒂安
我在 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=PropertyChanged
或 Mode=TwoWay
。随意添加你不理解的东西只会浪费你的时间,让你一事无成。
非常感谢您的回答。这不是对我的问题的严格回答,但给了我足够的信息来解决问题。
再次感谢:)
亲切的问候 塞巴斯蒂安