c# - 如何在 C# WPF 中有一个多列下拉框?
解决方案
你可以有点创意并解决这个问题。假设您有一个只有 60 像素宽的组合框。因此,您希望组合项目显示为完整的州名称和缩写,例如CA - California
,但如果选中,您只需要缩写。CA
.
我声明一个类来表示这样的状态:
public class State
{
public string ShortName { get; set; }
public string FullName { get; set; }
private string _displayName;
public string DisplayName
{
set
{
_displayName = value;
}
get
{
if (string.IsNullOrEmpty(_displayName))
return string.Format("{0} - {1}", ShortName, FullName);
else
return _displayName;
}
}
}
诀窍是您用来DisplayName
在组合框中显示项目。然后,在get
of 中DisplayName
,如果它已经有一个值,则返回它,如果没有,则连接状态的短名称和全名。
然后,当您进行数据绑定时,您有一个状态列表以及一个SelectedState
,并且在该属性的设置器中,您将 设置DisplayName
为ShortName
。
所以,我的XAML
:
<Grid>
<ComboBox ItemsSource="{Binding States}"
SelectedValue="{Binding SelectedState}"
DisplayMemberPath="DisplayName"
Name="CmbStates" Width="60" Height="32"/>
</Grid>
然后,在我的代码中:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
private List<State> _states;
public List<State> States
{
get { return _states; }
set
{
_states = value;
OnPropertyChanged("States");
}
}
private State _selectedState;
public State SelectedState
{
get { return _selectedState; }
set
{
_selectedState = value;
SelectedState.DisplayName = SelectedState.ShortName;
OnPropertyChanged("SelectedState");
}
}
public MainWindow()
{
InitializeComponent();
States = new List<State>
{
new State() { FullName = "California", ShortName = "CA" },
new State() { FullName = "New York", ShortName = "NY" },
new State() { FullName = "Oregon", ShortName = "OR" }
};
DataContext = this;
}
}
现在您应该在列表中有完整的串联名称:
但只有选择时的缩写:
推荐阅读
- mysql - MySQL合并两个ID相同的表
- unix - 为什么命令在 VFsync 和 Webminal 中不起作用?
- r - 如何在 SUDAAN 比较调查的估计值和该调查的样本)
- android-studio - Android Studio - 表格行
- android - google playstore 和 Aptoide App store 是如何直接在手机上安装应用而不是只下载 APK 文件的?
- azure - 是否有要运行的查询,以便我可以获取过去 30 天内未登录的用户列表?
- android - 什么是移动设备应用 URI 方案要求/标准?
- html - 是否可以使“a”元素占据包含元素的全部高度和宽度
- reactjs - 如何在单独的文件中从子组件(菜单项)调用父组件方法(关闭菜单)?
- codeigniter - Codeigniter Route 无法在实时服务器上运行,但可以在 localhost 上运行