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;
}
}
現在列表中應該有完整的串聯名稱:
但只有選擇時的縮寫:
- 1 回答
- 0 關注
- 210 瀏覽
添加回答
舉報