我正在 VS 2012 中构建一个 WPF 应用程序,它使用 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。
再次,没问题。
我不能做的是根据特定的 LicenseType 是否在 EntityType.LicenseTypes 的集合中,将 LicenseType 列表框中 CheckListBoxItem 的 IsSelected 属性设置为 true(从而“选中”复选框)。
这是我的 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 列表框项,检查是否存在与 EntityType 的 LicenseType 集合的关联,并尝试设置绑定到 XAML 的属性值:
私人无效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。
一般来说,我的弱项是处理与其他数据集合相关的记录集合,并构建一个允许用户清楚地添加和关联不同表的界面。
任何帮助都会很棒,
谢谢!保罗