将DataGridComboBoxColumn绑定到ViewModel属性

时间:2014-08-15 20:26:57

标签: c# wpf mvvm wpfdatagrid

我有一个包含IList RecipeLineItems属性的Recipe模型。单个RecipeLineItem模型具有Ingredient模型属性。

我创建了一个AddRecipeViewModel,用于输入和保存新的Recipe实例。 AddRecipeViewModel有一个Recipe属性,用于公开新的Recipe实例。 AddRecipeViewModel还有一个ObservableCollection IngredientList,用于在RecipeLineItem添加到Recipe 时选择一个成分(绑定到这是我的问题,我将继续描述)。我有一个AddRecipeView,它在用户控件中显示我的AddRecipeViewModel。

这是我的问题来自AddRecipeView的XAML:

<DataGrid Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding Recipe.RecipeLineItems}" AutoGenerateColumns="False">      
    <DataGrid.Columns>  
        <DataGridComboBoxColumn Header="Ingredient" SelectedItemBinding="{Binding Ingredient}" DisplayMemberPath="{Binding Ingredient.Title}" 
        <!-- 
        This doesn't work! I can't bind to the IngredientList property of my ViewModel! 
        -->
            ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type vm:AddRecipeViewModel}}, Path=IngredientList}"/>
        <!-- 
        This works! 
        -->
        <DataGridTextColumn Header="Quantity" Binding="{Binding Quantity}"/>
    </DataGrid.Columns>
</DataGrid>

<!-- 
This also works! 
-->
<ListBox Grid.Row="3" Grid.ColumnSpan="2" 
    ItemsSource="{Binding IngredientList}" DisplayMemberPath="{Binding Ingredient.Title}"/>

我无法弄清楚如何为我的DataGridComboBoxColumn设置ItemsSource,以便用户在向Recipe添加RecipeLineItem时选择Ingredient。我试过RelativeSource Self等无济于事。我很感激任何人对如何使这项工作有所了解的猜测!

我有一个临时解决方案:从AddRecipeViewModel获取一个成分列表,我创建了一个用于检索成分的静态类,并将其作为StaticResource添加到我的用户控件中。然后我设置我的DataGridComboBoxColumn的ItemSource =“{Binding myObjectProviderIngredientList”,它的工作原理。不过,我宁愿让我的ViewModel提供这个列表。

0 个答案:

没有答案