我有一个包含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提供这个列表。