2012-03-15 5 views
8

Мне нужна быстрая помощь, которая сейчас является блокировщиком дорог. У меня есть Button в ItemsControl, и мне нужно выполнить некоторые задачи при нажатии кнопки. Я попытался добавить Command в Button в I temsControlDataTemplate, но его не работает. Может ли кто-нибудь предложить, как двигаться дальше.Элемент управления кнопкой управления кнопкой мыши

<UserControl.Resources> 
    <DataTemplate x:key="mytask"> 
     <TextBox Grid.Row="5" Grid.Column="2" Text="{Binding Path=PriorNote}" Grid.ColumnSpan="7" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="0,5" Width="505" Foreground="Black"/> 
     <StatusBarItem Grid.Row="2" Grid.Column="8" Margin="8,7,7,8" Grid.RowSpan="2"> 
     <Button x:Name="DetailsButton" Command="{Binding CommandDetailsButtonClick}"> 
    </DataTemplate> 
</UserControl.Resources> 

<Grid> 
    <ItemsControl Grid.Row="1" 
        ItemsSource="{Binding ListStpRules}" 
        ItemTemplate="{StaticResource myTaskTemplate}" Background="Black" 
        AlternationCount="2" > 
    </ItemsControl> 
</Grid> 

и в ViewModel Я внедрил код для Command. И это не работает. Пожалуйста, предложите какое-либо решение для меня, чтобы продолжить дальнейшие

+0

Можете ли вы предоставить больше кода ??? –

ответ

0

Если ViewModel имеет свойство типа ICommand можно привязать Button «s Command свойства, что:

XAML:

<DataTemplate DataType="{x:Type my:FooViewModel}"> 
    <Button Content="Click!" Command="{Binding Path=DoBarCommand}" /> 
</DataTemplate> 

C#:

public sealed class FooViewModel 
{ 
    public ICommand DoBarCommand 
    { 
    get; 
    private set; 
    } 
    //... 
    public FooViewModel() 
    { 
    this.DoBarCommand = new DelegateCommand(this.CanDoBar, this.DoBar); 
    } 
} 
0

Просто догадаться. Есть CommandDetailsButtonClick, определенный в ViewModel, который является DataContext вашего UserControl (тот, у которого есть свойство ListStpRules)?

DataContext кнопки в ItemTemplate является товаром от ListStpRules, и если вы командуете там, перехват не найдет его.

Вы можете проверить диагностические сообщения из wpf в окне Output во время отладки вашего приложения. Он пишет там, если не может разрешить привязку.

15

DataContext каждого предмета в вашем ItemsControl является предметом в коллекции, который обязан ItemsControl. Если этот элемент содержит Command, ваш код должен работать нормально.

Однако, как правило, это не так. Как правило, существует ViewModel, содержащий ObservableCollection элементов для ItemsContro l и команду для выполнения. Если это ваш случай, вам необходимо изменить Source из вашего связывания, так это выглядит для команды в ItemsControl.DataContext, не ItemsControl.Item[X]

<Button Command="{Binding 
    RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, 
    Path=DataContext.MyCommand}" /> 
+2

Добавляя к хорошему ответу Рейчел, если вы хотите передать элемент в качестве параметра, используйте CommandParameter = "{Binding}" ... – isntn

+0

+1 Это отлично сработало для меня! Мне действительно нужно было привязать команду «Command» в представлении, а не в ViewModel, поэтому я использовал: '{Binding RelativeSource = {RelativeSource AncestorType = {x: Тип UserControl}}, Path = MyCommand}' вместо =] – newfurniturey