【发布时间】:2016-03-29 02:06:48
【问题描述】:
我在 Visual Studio 2015 中使用 Entity Framework 6 来构建一个 MVVM Light WPF 应用程序。我需要将导航属性 ICollection 绑定到一些 CheckBox 控件。一个 Employee 最多可以有 0 到 3 个 EmployeeStatus 实体,其中 employeeID 作为 EmployeeStatus 实体的键; EmployeeStatus 又在employeeStatusID 的EmployeeStatusDescription 表上有一个外键。 EmployeeStatusDescription 提供状态代码的描述(例如“归档”、“非活动”、“请假”)。每个 EmployeeStatus 对应一个 EmployeeStatusDescription。
EmployeeStatus 在 Employee 类中是这样定义的:
public virtual ICollection<EmployeeStatu> EmployeeStatus { get; set; }
EmployeeStatusDescription 在 EmployeeStatus 类中定义为:
public virtual EmployeeStatusDescription EmployeeStatusDescription { get; set; }
我想展示 3 个 CheckBox 控件并将每个控件绑定到来自 EmployeeStatus ICollection 值的值。例如,如果员工没有状态“Inactive”并且用户检查了它,我需要将其添加到 EmployeeStatus 集合中;如果用户取消选中该项目,我希望将其从 EmployeeStatus 集合中删除。
我创建了以下 StackPanel 来保存复选框;它们绑定到我的视图模型上的属性:
<StackPanel Grid.Row="12"
Grid.Column="1"
Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="Inactive" />
<CheckBox IsChecked="{Binding IsSelectedEmployeeInActive}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="Leave of Absence" />
<CheckBox IsChecked="{Binding IsSelectedEmployeeLoa}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="Archived" />
<CheckBox IsChecked="{Binding IsSelectedEmployeeArchived}" />
</StackPanel>
</StackPanel>
这是一个绑定到 CheckBox 控件的 IsChecked 依赖属性之一的示例属性:
private bool _isSelectedEmployeeInActive;
public bool IsSelectedEmployeeInActive
{
get { return _isSelectedEmployeeInActive; }
set
{
if (_isSelectedEmployeeInActive == value) return;
_isSelectedEmployeeInActive = value;
RaisePropertyChanged(() => IsSelectedEmployeeInActive);
}
}
我正在搜索以获取实体集合:
var query = (from e in Context.Employees
.Include("EmployeeStatus.EmployeeStatusDescription")
.Where(comparison)
select e);
SearchResults = new ObservableCollection<Employee>(query);
【问题讨论】:
标签: c# wpf entity-framework checkbox mvvm