Silverlight绑定 - 父级的CommandParameter(帮助删除x:名称)

时间:2011-08-12 02:01:57

标签: silverlight xaml data-binding windows-phone-7 command

知道如何绑定到列表框而不使用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交互

谢谢!

2 个答案:

答案 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 itmy 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">
    ...

其中extxmlns:ext="clr-namespace:ToolkitExtensions;clr-assembly=ToolkitExtensions"