簡體   English   中英

如何從另一個DataContext綁定ComboBox SelectedItem?

[英]How to bind ComboBox SelectedItem from another DataContext?

我有一個edit usercontrol ,用於編輯鍛煉詳細信息。 在該UC上,有一個combobox ,其數據上下文設置為“運動器材”的另一個視圖模型。 將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時,我將“鍛煉”對象傳遞給它,並將usercontrol的datacontext設置為該對象。

在該UC上,有一個組合框,其數據上下文設置為ExerciseEquipmentViewModel。 我從該視圖模型獲取itemsource。

我需要的是將Workout.IdExerciseEquipment正確綁定到Combobox itemsource。 當打開UserControl時,Combobox.SelectedItem應該是帶有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是空白的,我們設置一個值,其中項目ID匹配時,通過迭代AllExerciseEquipment這是你ItemSourceComboBox

由於我沒有您確切的類定義,請在需要的地方更改代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM