知道如何绑定到列表框而不使用x:Name作为下面的代码吗?我在ElementName = myList
使用xname<ListBox x:Name="myList" Grid.Row="1" Height="auto" ItemsSource="{Binding Path=ListItems}" ItemContainerStyle="{StaticResource StretchedItemContainerStyle}" ScrollViewer.VerticalScrollBarVisibility="Disabled" Background="Transparent">
<wi:Interaction.Triggers>
<wi:EventTrigger EventName="SelectionChanged">
<wi:InvokeCommandAction Command="{Binding Source={StaticResource Locator}, Path=ViewModel.Command}" CommandParameter="{Binding SelectedItem, ElementName=myList}" />
</wi:EventTrigger>
</wi:Interaction.Triggers>
<ListBox.ItemTemplate>
每次使用InvokeCommandAction时,我真的不想为控件定义名称。注意:wi是SL4 / WP7.1的Windows交互
谢谢!
答案 0 :(得分:1)
尝试绑定到“SelectedItem”,并且无需完全传递CommandParameter。不要忘记Mode = TwoWay。在ViewModel中添加“SelectedListItem”INotifyPropertyChanged getter / setter并绑定到该属性。
<ListBox SelectedItem={Binding SelectedListItem, Mode=TwoWay} Grid.Row="1" Height="auto" ItemsSource="{Binding Path=ListItems}" ItemContainerStyle="{StaticResource StretchedItemContainerStyle}" ScrollViewer.VerticalScrollBarVisibility="Disabled" Background="Transparent">
<wi:Interaction.Triggers>
<wi:EventTrigger EventName="SelectionChanged">
<wi:InvokeCommandAction Command="{Binding Source={StaticResource Locator}, Path=ViewModel.Command}" />
</wi:EventTrigger>
</wi:Interaction.Triggers>
<ListBox.ItemTemplate>
</ListBox>
答案 1 :(得分:0)
我不确定这是否真的可行,所以当我怀疑并等待其他人回答时,我会建议采用不同的方法。
您可以使用附加行为来执行此操作,这是一种简单而简洁的方法,可以提供更清晰的代码。
我在written about it上my blog,并为其发布了一个框架,即available on NuGet。
您ListBox
所需要的是SelectorExtension
。如果您只是想要代码,请查看下面的内容:SelectorExtension.cs。 (来源是麻省理工学院许可)
这意味着您只需将代码更改为以下内容:
<ListBox ext:SelectorExtension.Command="{Binding Source={StaticResource Locator}, Path=ViewModel.Command}"
Grid.Row="1"
Height="Auto"
ItemsSource="{Binding Path=ListItems}"
ItemContainerStyle="{StaticResource StretchedItemContainerStyle}"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
Background="Transparent">
...
其中ext
为xmlns:ext="clr-namespace:ToolkitExtensions;clr-assembly=ToolkitExtensions"