Имеется список всех контрагентов Contractors, имеется список партнеров Partners, второй список есть подмножество первого, оба свойства доступны в VM
Во View есть ItemsControl с CheckBox'ами в котором содержится список контрагентов:
мне нужно теперь расставить флажки в чекбоксах для всех контрагентов, которые являются партнерами:
В конвертере реализовал метод Convert
class CheckPartnersConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values[1] is List
хорошо, это, вроде, работает.
Как теперь реализовать обратное конвертирование и вообще возможно ли его реализовать?
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
var res = new object[]
{
Binding.DoNothing,
Binding.DoNothing
};
return res;
}
}
Если это невозможно, готов отказаться от представления чекбоксами и заменить его, например на ListBox с SelectionMode="Multiple" и партнеров просто выделять, но там тоже проблемы с SelectedItems победить не удается
Ответ
Мне кажется, вы усложняете себе жизнь.
Смотрите, ваша бизнес-логика хочет отобрать из контрагентов партнёров. Это существенный кусок бизнес-логики, а значит, имеет смысл не пожалеть завести для него отдельный VM-класс:
class MaybePartner : NotifyPropertyChangedImpl
{
public Contractor Contractor { get; }
bool isPartner;
public bool IsPartner
{
get => isPartner;
set
{
if (Set(ref isPartner, value))
{
// тут можно включить контрагента в список или исключить его
}
}
}
public MaybePartner(Contractor c, bool isInitiallyPartner)
{
Contractor = c;
isPartner = isInitiallyPartner;
}
}
Теперь ваша задача тривиальна: вы при входе в эту часть бизнес логики создаёте список MaybePartner'ов, и привязываетесь просто как
Вроде бы всё.
Комментариев нет:
Отправить комментарий