gpt4 book ai didi

c# - WPF MVVM - 重复组合框,将 selectedItem 作为参数传递

转载 作者:行者123 更新时间:2023-12-03 10:37:15 25 4
gpt4 key购买 nike

仍然从 web/MVC 的背景中掌握 WPF。我已经实现了一些在 UI 场景中很常见的东西,一个重复的项目列表以及一些控件,以允许用户对这些项目执行操作(我省略了一些绑定(bind),因为它们是长的 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 - 它不能真正绑定(bind)到 ViewModel 属性,因为它对 Counts 中的每个项目都重复。所以目前它只包含一个可能值的列表。

Button 命令绑定(bind)回 ViewModel 上的命令。但是,为了在按钮按下时执行任何操作,我需要将参数传递给命令 - 即 Button 绑定(bind)到的项目的 ID 以及用户在与此按钮配对的特定 ComboBox 中选择的任何内容。

ID 很简单——我可以为此绑定(bind)一个 CommandParameter。但是如何将选定的 ComboBox ID 传递给函数,以及如何确保它是配对 ComboBox 的 ID?

编辑:进一步的研究表明,虽然传递一个 CommandParameter 很简单,但传递两个却不是。我看到了涉及转换器的答案,但在这种情况下,我的两个参数来自不同的来源,所以我真的不能这样做。关于如何通过两者的帮助也将不胜感激。

最佳答案

以下是您可以传递来自任意来源的多个值的方法 - 您可以采用与用于补偿缺失 MultiBinding 的方法相同的方法在 Silverlight - 继电器。这个想法很简单——创建一个合成 FrameworkElement (此处为 FE )将充当绑定(bind)外观,我会选择轻型的 - 例如 TextBlock .

使其Tag使用 MultiBinding 绑定(bind)到您的多个位置的属性和 Converter ,单独的腿将绑定(bind)到单独的 ElementNames。转换器将简单地打包来自多个来源的值并将其返回 - 它可以是逗号分隔的字符串,也可以是由您决定的对象。转换器的返回显然会保存在Tag您门面的属性(property) FE .

最终绑定(bind)到门面 FE 使用 ElementName作为来源和Tag作为路径。

关于c# - WPF MVVM - 重复组合框,将 selectedItem 作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com