Items
속성이 객체 컬렉션에 바인딩 된 ComboBox
이 있습니다. 또한 전체 컬렉션에 바인딩 된 SelectedItem
속성이 있으며 ValueConverter
컬렉션의 요소를 검사하고 선택 될 1 개의 항목을 반환하도록 설계되었습니다. 이 부분은 작동합니다.ConvertBack (...)이 WPF ComboBox 선택 변경에서 실행되도록
사용자가 ComboBox에서 선택을 변경하면 ValueConverter
의 ConvertBack(...)
메서드가 호출되지 않습니다. 사용자가 선택한 항목을 가져 와서 컬렉션을 다시 검사하고 이전에 선택한 항목과 새로 선택한 항목을 적절히 편집해야하기 때문에 호출 된 ConvertBack(...)
이 필요합니다.
나는이 접근법이 어색하다는 것을 알고 있지만, 그것이 길이다. 여기에 관련 코드는 다음과 같습니다
콤보 :
<ComboBox ItemsSource="{Binding}" SelectedItem="{Binding Path=., Converter={StaticResource ResourceKey=DataInputAssetChoiceSelectedItemConverter}}" />
ValueConverter :
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
이벤트 만 사용하고 있습니까? 그렇다면 왜?
감사합니다. 이 동작을 기반으로 DataContext를 Binding의 소스로 사용하는 것은 아마도 Binding에 완전히 참여할 수 없으므로 허용되지 않아야합니다. SelectionChanged 이벤트를 사용하여 거기에서 DataCollection의 내용을 편집해야 할 것입니다. 데이터 모델을 변경하면 실제 속성에 바인딩 할 수 있지만 무서울 수 있습니다. – tyriker
이 특정 상황에서 ConvertBack (...)이 작동하지 않는 이유를 설명 했으므로 답변으로 표시했습니다. 감사. – tyriker