【发布时间】:2014-08-28 08:42:26
【问题描述】:
我在 xaml 中声明了一个ListBox,其中它的ItemsSource 绑定到一个ObservableCollection。在MVVM工作:
<ListBox ItemsSource="{Binding Arguments}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:CArgumentClass}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding ArgName}" ToolTip="{Binding Documentation}"/>
<TextBox Text="{Binding ValueToShow, TargetNullValue=Missing}"/>
</StackPanel>
</DataTemplate>
</ListBox.Resources>
</ListBox>
我可以将命令附加到列表框事件。我正在使用Caliburn 框架,但还有很多其他方法可以做到这一点。我也可以向方法发送参数,在这个例子中我发送数据上下文:
<ListBox ItemsSource="{Binding Arguments}">
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:CArgumentClass}">
<StackPanel Orientation="Horizontal">
<Button Style="{StaticResource DeleteButton}"
cal:Message.Attach="DeleteArgument($dataContext)]"/>
<TextBlock Text="{Binding ArgName}" ToolTip="{Binding Documentation}"/>
<TextBox Text="{Binding ValueToShow, TargetNullValue=Missing}"/>
</StackPanel>
</DataTemplate>
</ListBox.Resources>
</ListBox>
我的问题是,我可以将项目索引发送到方法吗?怎么样?
请注意,此代码是针对问题编写的,我的目的是由用户以简单的方式从视图中删除列表中的项目。列表中的项目不可聚焦。
【问题讨论】:
-
您可能会发送项目并从命令处理程序中的原始集合中获取索引。在 xaml 中它可能变得有点复杂
标签: c# wpf mvvm observablecollection caliburn