Связывание в стиле ListBoxItem с RelayCommand - PullRequest
0 голосов
/ 01 февраля 2012
  • Как видно из приведенного ниже DataTemplate, я создал список кнопок.Я указал Command и CommandParameter для этой кнопки.Но когда эти кнопки имеют CanExecute и Execute, методы не запускаются.Теперь, если я помещаю одну кнопку на пользовательский элемент управления и связываю команду, событие запускается.Почему это происходит?
       <ListView ItemContainerStyle="{StaticResource AlphabetsContainerStyle}" 
              ItemsSource="{Binding Alphabets}"/>
            <Button Command="{Binding Path=FilterCommand}" CommandParameter="A"/>   <!-- Works -->


            <!-- Code in the Resource Dictionary File -->

            <DataTemplate x:Key="AlphabetsTemplate">
                    <Border>            
                        <Button Content="{Binding}"  
                                Command="{Binding Path=FilterCommand}"
                                CommandParameter="A"/>                   <!-- Doesn't Work -->
                    </Border>
            </DataTemplate>

            <Style TargetType="{x:Type ListBoxItem}" x:Key="AlphabetsContainerStyle">
                <Setter Property="ContentTemplate" Value="{StaticResource AlphabetsTemplate}"/>
            </Style>

** Я удалил другие свойства сеттера и ресурсы для поддержания чистоты кода.

  • Во-вторых, как я могу заменить кнопку с меткой и прикрепить ICommand непосредственно к ListBoxItem?
 <!-- Replacing Button with Label -->
    <DataTemplate x:Key="AlphabetsTemplate">
            <Border>            
                <Label Content="{Binding}"         <!-- Label Doesnt have Command Property -->
            </Border>
    </DataTemplate>

 <!-- How can I  set Command directly to ListBoxItem ?-->
    <Style TargetType="{x:Type ListBoxItem}" x:Key="AlphabetsContainerStyle">
        <Setter Property="ContentTemplate" Value="{StaticResource AlphabetsTemplate}"/>
    </Style>

Заранее спасибо.:)

С уважением,

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

Кажется, что FilterCommand теряет текстовый текст данных, укажите ElementName, где была определена FilterCommand (например, определите X: Name для вашего окна и предоставьте его как Element)

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" x:Name="A1">
    <Window.Resources>

        <DataTemplate x:Key="AlphabetsTemplate">
            <Border>
                <Button Content="{Binding}"  
                        Command="{Binding Path=FilterCommand, ElementName=A1}"
                        CommandParameter="A"/>               
            </Border>
        </DataTemplate>
0 голосов
/ 01 февраля 2012

Для случая с кнопкой вы должны изменить порядок стилей и DataTemplate-

<DataTemplate x:Key="AlphabetsTemplate">
        <Border>            
            <Button Content="{Binding}"  
                    Command="{Binding Path=FilterCommand}"
                    CommandParameter="A"/>                   <!-- Doesn't Work -->
        </Border>
</DataTemplate>    

<Style TargetType="{x:Type ListBoxItem}" x:Key="AlphabetsContainerStyle">
    <Setter Property="ContentTemplate" Value="{StaticResource AlphabetsTemplate}"/>
</Style>

Для этикетки, пожалуйста, укажите ваши требования.

...