【发布时间】:2024-04-12 22:55:02
【问题描述】:
仍然从 web/MVC 的背景中掌握 WPF。我已经实现了一些在 UI 场景中很常见的东西,一个重复的项目列表以及一些控件,以允许用户对这些项目执行操作(我省略了一些绑定,因为它们是长的 relativeSource 指令,它们是与问题无关):
<ItemsControl ItemsSource="{Binding Counts}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<ComboBox ItemsSource="{}" DisplayMemberPath="Description"></ComboBox>
<Button Command="{}" Content="Add></Button>
<TextBlock VerticalAlignment="Center">
<Run Text="{Binding Path=Date, StringFormat=dd/MM/yyyy}"></Run>
<Run Text=" - "></Run>
<Run Text="{Binding Name}"></Run>
</TextBlock>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
如您所见,ComboBox 没有实现 SelectedValue 或 SelectedValuePath - 它不能真正绑定到 ViewModel 属性,因为它对 Counts 中的每个项目都重复。所以目前它只包含一个可能值的列表。
Button 命令绑定回 ViewModel 上的命令。但是,为了在按钮按下时执行任何操作,我需要将参数传递到命令中 - 即 Button 绑定到的项目的 ID 以及用户在与此按钮配对的特定 ComboBox 中选择的任何内容。
ID 很简单——我可以为此绑定一个 CommandParameter。但是如何将选定的 ComboBox ID 传递给函数,以及如何确保它是配对 ComboBox 的 ID?
编辑:进一步的研究表明,虽然传递一个 CommandParameter 很简单,但传递两个却不是。我看到了涉及转换器的答案,但在这种情况下,我的两个参数来自不同的来源,所以我真的不能这样做。对于如何通过两者的帮助也将不胜感激。
【问题讨论】:
-
您尝试过 ElementName 绑定吗?
-
没有。我认为它会失败,因为 ComboBox 在 ItemsControl 中,因此每个 ComboBox 将具有相同的 Name 属性。不是这样吗?
-
有一个命名范围的概念,名称必须是唯一的,只有在它的命名范围内。
-
你说的很对。它确实有效。现在我只需要弄清楚如何通过两者:) 谢谢。