如何从另一个数据上下文绑定组合框选定项
本文关键字:组合 绑定 上下文 另一个 数据 | 更新日期: 2023-09-27 18:35:48
>我有一个编辑usercontrol
,用于编辑锻炼详细信息。在该UC上,有一个combobox
,其数据上下文设置为健身器材的另一个视图模型。打开uc后如何获得所选项目进入锻炼的属性。
这是代码:
<ComboBox Name="ExeEquComboBox"
ItemsSource="{Binding AllExerciseEquipment}"
DisplayMemberPath="Name"
SelectedValue="{Binding ExerciseEquipment, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Grid}}, Mode=TwoWay}">
<ComboBox.DataContext>
<ExerciseEquipmentViewModel/>
</ComboBox.DataContext>
</ComboBox>
编辑:根据要求发布更多详细信息:
锻炼属性包括:名字描述IdExerciseEquipment(Exercise Equipment表的外键)。
我有 2 个视图模型:锻炼视图模型运动器材视图模型
当我打开 UC 时,我将锻炼对象传递给它,并将用户控件的数据上下文设置为该对象。
在该UC上有一个组合框,其数据上下文设置为ExerciseEquipmentViewModel。我从该视图模型中获取项源。
我需要的是将Workout.IdExerciseEquipment正确绑定到Combobox itemsource。打开用户控件时,组合框.选定项应该是 Workout.IdExerciseEquipment 的项目,但我不知道如何实现。
谢谢。
有两种方法可以执行此操作:
Ancestor Binding
就像你所做的那样。只需更正binidng
,如下所示:
SelectedValue="{Binding DataContext.ExerciseEquipment, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Mode=TwoWay}"
Element Binding
,如下所示:
ComboBox Name="ExeEquComboBox"
ItemsSource="{Binding AllExerciseEquipment}"
DisplayMemberPath="Name"
SelectedValue="{Binding ElementName=UserControlName,Path=DataContext.ExerciseEquipment}">
更新:从您提供的信息中,我能够理解Workout
对象中IdExerciseEquipment
属性,我认为这是用于区分AllExerciseEquipment
项目的某种 ID。我认为您应该在类中创建如下属性Workout
:
private string exerciseEquipment;
public string ExerciseEquipment
{
get
{
if (exerciseEquipment == null)
{
exerciseEquipment = AllExerciseEquipment.FirstOrDefault(x => x.ID == this.IdExerciseEquipment);
}
return exerciseEquipment;
}
set
{
exerciseEquipment = value;
}
}
因此,默认情况下,当ExerciseEquipment
为空时,我们通过迭代AllExerciseEquipment
哪个是您的ComboBox
ItemSource
,为匹配ID
的项目设置一个值。
由于我没有您的确切类定义,请在需要时更改代码。