我有一个编辑usercontrol
,用于编辑锻炼详细信息。
在该UC上有一个combobox
,其datacontext设置为另一个运动设备的视图模型。如何打开uc到选定的项目到达Workout的属性。
以下是代码:
<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(ExerciseEquipment表的外键)。
我有2个ViewModel: WorkoutViewModel ExerciseEquipmentViewModel
当我打开UC时,我将Workout对象传递给它,并将usercontrol的datacontext设置为该对象。
在该UC上有一个组合框,其datacontext设置为ExerciseEquipmentViewModel。 我从该viewmodel获取了itemsource。
我需要的是将Workout.IdExerciseEquipment正确绑定到Combobox项目源。打开UserControl时,Combobox.SelectedItem 应该是Workout.IdExerciseEquipment的项目,但我不知道如何实现。
感谢。
答案 0 :(得分:0)
有两种方法可以做到这一点:
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}">
更新:根据您提供的信息,我能够理解IdExerciseEquipment
对象中有Workout
属性,我认为这是区分的某种ID AllExerciseEquipment
个项目。我认为您应该在Workout
class:
private string exerciseEquipment;
public string ExerciseEquipment
{
get
{
if (exerciseEquipment == null)
{
exerciseEquipment = AllExerciseEquipment.FirstOrDefault(x => x.ID == this.IdExerciseEquipment);
}
return exerciseEquipment;
}
set
{
exerciseEquipment = value;
}
}
因此,默认情况下,当ExerciseEquipment
为空时,我们会为ID
匹配的项目设置一个值,方法是迭代AllExerciseEquipment
ItemSource
ComboBox
}}。
由于我没有确切的类定义,请在需要时更改代码。