2012-03-15 53 views
8

Tôi cần một số trợ giúp nhanh chóng là công cụ chặn đường cho tôi ngay bây giờ. Tôi có Button trong ItemsControl và tôi cần thực hiện một số tác vụ trên Nhấp chuột vào nút. Tôi đã thử thêm Command vào Button trong I temsControlDataTemplate nhưng không hoạt động. Bất cứ ai có thể đề nghị làm thế nào để tiến xa hơn.ItemsControl button click command

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

và trong ViewModel Tôi đã triển khai mã cho Command. Và nó không hoạt động. Xin gợi ý cho bất kỳ giải pháp cho tôi để tiến hành thêm

+0

Bạn có thể cung cấp mã hơn ??? –

Trả lời

0

Nếu ViewModel của bạn có một loại tài sản của ICommand bạn có thể ràng buộc Command tài sản 's Button đó:

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

Chỉ cần đoán. Có phải CommandDetailsButtonClick được định nghĩa trong một ViewModel, là DataContext của UserControl của bạn (thuộc tính có thuộc tính ListStpRules) không?

DataContext nút trong ItemTemplate là một mục từ ListStpRules và nếu bạn không có lệnh đó thì ràng buộc sẽ không tìm thấy.

Bạn có thể kiểm tra thông báo chẩn đoán từ wpf trong cửa sổ Đầu ra trong khi gỡ lỗi ứng dụng của bạn. Nó viết ở đó nếu nó không thể giải quyết ràng buộc.

15

DataContext của mỗi mục trong ItemsControl của bạn là mục trong bộ sưu tập mà ItemsControl bị ràng buộc. Nếu mặt hàng này có chứa mã số Command, mã của bạn sẽ hoạt động tốt.

Tuy nhiên, điều này thường không xảy ra. Thông thường, có một ViewModel chứa một số ObservableCollection của các mục cho số ItemsContro l và Lệnh để thực thi. Nếu đây là trường hợp của bạn, bạn sẽ cần phải thay đổi Source ràng buộc của bạn để nó trông cho lệnh trong ItemsControl.DataContext, không ItemsControl.Item[X]

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

Thêm vào câu trả lời hay của Rachel, nếu bạn muốn chuyển mục như tham số, hãy sử dụng CommandParameter = "{Binding}" ... – isntn

+0

+1 Điều này làm việc hoàn hảo cho tôi! Tôi thực sự cần phải liên kết với một 'Command' trong View và không phải ViewModel, vì vậy tôi đã sử dụng:' {Binding RelativeSource = {RelativeSource AncestorType = {x: Type UserControl}}, Path = MyCommand} 'thay vì =] – newfurniturey

Các vấn đề liên quan