我有一个组合框,我绑定到一个可观察的集合,它被更改(根据公司选择)和大量的公司将有一个帐户(项目)因此我想知道什么是最好的方式来制作ComboBox如果ItemsSource中只有1个项目,则设置SelectedItem,否则将其保留为null以确保用户选择一个帐户 .
我现在这样做的方法是每次更改帐户集时检查帐户集合,如果它只包含一个帐户集合,则将绑定的选定项目属性设置为集合中的第一个项目 .
这看起来很冗长,我需要将它分别实现到每个视图模型中,并为每个组合框写入最多5行代码 .
以下是我目前的代码,但我想知道是否可以通过扩展ComboBox控件来实现这一目的?如果有人对如何/从哪里开始有任何想法 .
public CompanyGermanPower FromCompany
{
get { return _fromCompany; }
set
{
SetField(ref _fromCompany, value, () => FromCompany);
if(value!= null)
{
FromTradeAccountList = new ObservableCollection<TradeAccount>(TradeAccountAdapter.GetTradeAccounts(_session, value.ID));
if (Trade != null && FromTradeAccountList.Count == 1) Trade.TradeAccountFrom = FromTradeAccountList[0];
}
}
} private CompanyGermanPower _fromCompany;
2 回答
创建一个符合你想要的Attached Behaviour应该是相当简单的 . 要检测ComboBox中的Items集合何时发生更改,您需要使用此blog post中提到的技巧 .
Update :这里's my stab at it (you' ll需要在项目中添加对System.Windows.Interactivity的引用 - 你可以从Expression Blend SDK中获取它:
以下是您使用它的方式:
仅使用XAML:
当然,您可能希望为该样式添加一个键,并将其基于ComboBoxes的默认样式,以使其真正有用,但我希望您能理解 .