Я создаю приложение WPF в VS 2012, которое использует Code First Entity Framework, репозиторий и шаблон MVVM.
У меня два класса: EntityType и LicenseType.
EntityType определяется следующим:
private int _id;
private string _name;
private string _description;
private List<LicenseType> _licenseTypes = new List<LicenseType>();
LicenseType объявляется с помощью:
private int _id;
private string _name;
private string _description;
И для этих частных полей объявлены публичные свойства.
Я привязываю ObservableCollection к CheckedListBox (продукт Syncfusion).
Без проблем.
Под ним я привязываю еще один CheckedListBox к ObservableCollection.
Опять же, без проблем.
Что я не могу сделать, так это установить для свойства IsSelected элемента CheckListBoxItem в списке LicenseType значение true (тем самым «проверяя» флажок) в зависимости от того, находится ли этот конкретный LicenseType в коллекции EntityType.LicenseTypes.
Вот код моего CheckedListBox:
<syncfusion:CheckListBox x:Name="lstAllLicenseTypes" ItemsSource="{Binding AllLicenseTypes}" DisplayMemberPath="Name" >
<syncfusion:CheckListBox.ItemContainerStyle>
<Style TargetType="syncfusion:CheckListBoxItem">
<Setter Property="IsSelected" Value="{Binding ????}"/>
</Style>
</syncfusion:CheckListBox.ItemContainerStyle>
</syncfusion:CheckListBox>
Я пробовал два подхода, первый заключался в том, чтобы перебрать каждый из элементов списка LicenseType, проверить, была ли связь с коллекцией LicenseType EntityType, и попытаться установить значение свойства, которое было привязано к XAML:
private void ListEntityTypes_OnSelectionChanged (отправитель объекта, SelectionChangedEventArgs e) {var thisEntity = (EntityType) listEntityTypes.SelectedItems [0];
foreach (object t in lstAllLicenseTypes.Items)
{
bool hasAssociation = _vmEntityTypes.EntityHasAssociationWithThisLicenseType(thisEntity,(LicenseType) t);
if (hasAssociation)
{
_vmEntityTypes.CurrentEntityIsAssociatedWithCurrentLicenseType = true;
}
else
{
_vmEntityTypes.CurrentEntityIsAssociatedWithCurrentLicenseType = false;
}
}
}
Цель здесь - привязать к свойству CurrentEntityIsAssociatedWithCurrentLicenseType. Это не сработало. Я думаю, что это не сработало, потому что для каждого элемента в CheckedListBox значение свойства было обновлено, и поэтому в конце оно было ложным, поэтому ни один элемент не был проверен.
Другой подход был аналогичен описанному выше, но я пытался вручную «проверить» элемент списка, однако мне никогда не удавалось вернуть LicenseType в CheckListItem.
В общем, то, в чем я слаб, - это работа с коллекциями записей, которые относятся к другим коллекциям данных, и создание интерфейса, который позволяет пользователям четко добавлять и связывать разные таблицы.
Любая помощь была бы замечательной,
Спасибо! Павел