我有一個組合框綁定到對象的集合。這些對象具有屬性布爾值IsSelected,該屬性指定當前是否選擇要在ComboBox文本區域中顯示的對象。組合框,WPF非常新
爲了使它使用IsSelected布爾屬性來顯示ComboBox中的默認項目,我添加了一個類似下面的ValueConverter類。
public class SelectedItemConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value is IEnumerable<Car>)
{
return ((IEnumerable<Car>)value).Where(n => n.IsSelected).FirstOrDefault();
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value is Car)
{
return value;
}
return null;
}
}
我ComboBox位於UserContrl及其XAML是:
<ComboBox ItemsSource="{Binding CarsList}"
SelectedItem="{Binding CarsList, Converter={StaticResource selectedItemConverter}}"
DisplayMemberPath="Name">
</ComboBox>
我使用的SelectedItem,因爲我的車對象有IsSelected是布爾和它所代表的汽車是否在組合框的文本區域中可見, 。出於這個原因,我有上面的ValueConverter使用該布爾值來正確返回對象。
這很好,當ComboBox加載時,IsSelected = True的對象將顯示在ComboBox文本區域中。但是,如果我展開下拉菜單並選擇另一個對象,則該對象將顯示,但ComboBox會獲得一個紅色邊框,據我所知,這意味着存在一些驗證問題。
我該如何解決這個問題?
我見過很多例子,但他們都沒有解決布爾屬性IsSelected用來確定在ComboBox中顯示哪個對象的問題。
我該如何解決這個問題?
也許問題是'ConvertBack'功能,它應該返回'IEnumerable的 CarsList'。無論如何,我認爲你應該用這種方式重新考慮對'SelectedItem'的綁定。 –
bars222
你是對的,ConvertBack正在返回Car實例而不是CarList實例。但問題是我沒有CarList實例,因爲它沒有傳遞到ConvertBack。所以不知道如何讓它返回。 – pixel
我認爲@Bolu建議如何更改綁定的好方法。否則,您可以嘗試將'CarList'作爲'ConverterParameter'傳遞(如果'CarList'集合永遠不會更改,您可以在xaml中像定義資源那樣定義它),但這是奇怪複雜的方式。 – bars222