Thêm click event vào item control wpf

Dạ, em muốn thêm click event vào cho item trong item control, khởi tạo như sau

<ScrollViewer >
    <ItemsControl x:Name="itemctrlMain" 
                  >
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="4" IsItemsHost="True">

                </UniformGrid>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Button Command="{Binding ClickedItemCtrlCmd}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</ScrollViewer>

code ClickedItemCtrlCmd
public ICommand ClickedItemCtrlCmduc = new RelayCommand<Button>((p) => { return true; }, (p) => { MessageBox.Show("Clicked"); });
Em thử thì lệnh ClickedItemCtrlCmduc hoạt động được trên những button bên ngoài item conltrol. Em có làm thiếu hay sai ở chỗ nào không ạ?

Khi bạn dùng binding, phải chú ý xem data context của control đang ở đâu.
Đối với button ở ngoài, data context của nó tương ứng với data context của window ( hoặc user control)
Còn đối với listview, listbox, … Data context là object bạn gán cho từng item


https://wpf-tutorial.com/vi/36/data-binding/sử-dụng-datacontext/

Trong TH của bạn có thể sử dụng:

{Binding Path=ClickedItemCtrlCmd,
    RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

typeOfAncestor là type của window (hoặc user control) mà bạn khai báo ClickedItemCtrlCmd

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?