【发布时间】:2011-05-11 17:39:20
【问题描述】:
我有一个ComboBox,其Items 属性绑定到一个对象集合。我还将SelectedItem 属性绑定到整个集合,ValueConverter 旨在检查集合中的元素并返回要选择的 1 个项目。这部分有效。
当用户在 ComboBox 上进行选择更改时不起作用,ValueConverter 的 ConvertBack(...) 方法不会被调用。我需要调用ConvertBack(...),因为我需要接受用户的选择,重新检查集合,并适当地编辑旧的选中项和新选中的项。
我知道这种方法很尴尬,但就是这样。以下是相关代码:
组合框:
<ComboBox ItemsSource="{Binding}" SelectedItem="{Binding Path=., Converter={StaticResource ResourceKey=DataInputAssetChoiceSelectedItemConverter}}" />
值转换器:
public class DataInputAssetChoiceSelectedItemConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value != null)
{
foreach (CustomObject Choice in (Collection<CustomObject>)value)
{
if (Choice.IsSelected)
{
return Choice;
}
}
return ((Collection<CustomObject>)value).First();
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{ //breakpoint...execution never gets here!
return null;
}
}
那么为什么ConvertBack(...) 从来没有被调用呢?这只是我对ComboBox 的误解吗?我尝试过使用SelectedItem、SelectedValue、SelectedIndex 的这种方法,并尝试使用UpdateSourceTrigger、各种绑定模式、DataTriggers,但似乎永远无法调用ConvertBack(...)。使用SelectionChanged 事件是唯一的选择吗?如果有,为什么?
【问题讨论】:
标签: wpf combobox ivalueconverter