繁体   English   中英

如何在C#WPF中使用多列下拉框?

[英]How can I have a multi-column dropdown box in C# WPF?

我正在尝试在c#wpf中创建一个多列组合框,如下所示。 有任何想法吗?

在此处输入图片说明

当选择一行时,仅显示状态代码,但是所有详细信息都可以显示在下拉选择中。

您可以得到一些创意,并解决此问题。 假设您有一个仅60px宽的组合框。 因此,您希望组合项目显示为完整的州名和缩写,例如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在组合框上显示项目。 然后,在DisplayNameget中,如果它已经具有一个值,则将其返回,如果没有,则将状态的简称和全名串联起来。

然后,在进行数据绑定时,将具有状态列表以及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;
    }
}

现在,您应该在列表中具有完整的串联名称:

在此处输入图片说明

但仅在选择时缩写:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM