Привязка Silverlight - CommandParameter к родителю (помогите удалить x: Name) - PullRequest
1 голос
/ 12 августа 2011

Есть идеи, как связать со списком и не использовать x: Name для кода ниже?Я использую xname в ElementName = myList

<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 - интерактивность Windows для SL4 / WP7.1

Спасибо!

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Попробуйте вместо этого связать с «SelectedItem» и полностью исключить необходимость передавать CommandParameter.Не забудьте Mode = TwoWay.Добавьте "SelectedListItem" INotifyPropertyChanged getter / setter в вашу ViewModel и привяжите к этому свойству.

<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>
0 голосов
/ 12 августа 2011

Я не уверен, возможно ли это на самом деле, поэтому, хотя я сомневаюсь и жду ответа от других, я бы порекомендовал другой подход.

Для этого можно использовать прикрепленное поведение, которое являетсяпростой и аккуратный подход, дающий намного более чистый код.

Я написал об этом на моем блоге , и опубликовал для этого фреймворк, это доступно на NuGet .

Что вам нужно для ListBox, это SelectorExtension.Если вам нужен только код, смотрите не далее, чем здесь: SelectorExtension.cs .(Источник имеет лицензию MIT)

Это означает, что вы можете просто изменить свой код на следующее:

<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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...