亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 C# WPF 中擁有多列下拉框?

如何在 C# WPF 中擁有多列下拉框?

C#
至尊寶的傳說 2023-08-27 10:18:49
我正在嘗試在 c# wpf 中創建一個多列組合框,如下所示。有任何想法嗎?當選擇一行時,僅顯示州代碼,但所有詳細信息都可以顯示在下拉選擇中。
查看完整描述

1 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

你可以發揮一點創意來解決這個問題。假設您有一個寬度僅為 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在組合框中顯示項目。然后,在getof中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;

    }

}

現在列表中應該有完整的串聯名稱:

https://img1.sycdn.imooc.com//64eab2ed000129e701280105.jpg

但只有選擇時的縮寫:

https://img1.sycdn.imooc.com//64eab2f50001748e01060079.jpg


查看完整回答
反對 回復 2023-08-27
  • 1 回答
  • 0 關注
  • 210 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號