如何从另一个数据上下文绑定组合框选定项

本文关键字:组合 绑定 上下文 另一个 数据 | 更新日期: 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的项目设置一个值。

由于我没有您的确切类定义,请在需要时更改代码。