我想捕获Datatemplate中定义的已检查事件

时间:2014-11-11 22:10:24

标签: wpf xaml

我有一个ResourceDictionary,我有这个代码:

<DataTemplate x:Key="UserDataTemplate">
        <StackPanel Orientation="Horizontal">
            <StackPanel>
                <Image Source="{Binding Path=MyPhoto}" Height="100"/>
                <Label HorizontalAlignment="Center" Content="{Binding Path=Names}"/>
            </StackPanel>
            <CheckBox x:Name="chkBxRegistered" VerticalAlignment="Center" HorizontalAlignment="Center"/>
        </StackPanel>        
    </DataTemplate>

在我的xaml文件中我有:

<ItemsControl x:Name="UserList" ItemTemplate="{StaticResource UserDataTemplate}" Grid.Column="1">
                            <ItemsControl.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <VirtualizingStackPanel Orientation="Horizontal"/>
                                </ItemsPanelTemplate>
                            </ItemsControl.ItemsPanel>
                        </ItemsControl>

我以这种方式绑定我的列表

UserList.ItemsSource = result; //列出结果  所以,在我的代码背后,我想抓住检查事件并完成我需要的所有逻辑,或者如果有人有其他想法,请评论并帮助我,谢谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

考虑到我不知道你的xaml.cs是什么样的,最简单的解决方法是将DataTemplate从ResourceDictionary移动到你的xaml文件(你定义了ItemsControl),然后设置Checked事件处理程序在DataTemplate中的CheckBox上。

您修改过的DataTemplate如下所示:

<DataTemplate x:Key="UserDataTemplate">
    <StackPanel Orientation="Horizontal">
        <StackPanel>
            <Image Source="{Binding Path=MyPhoto}" Height="100"/>
            <Label HorizontalAlignment="Center" Content="{Binding Path=Names}"/>
        </StackPanel>
        <CheckBox x:Name="chkBxRegistered" VerticalAlignment="Center" HorizontalAlignment="Center" Checked="ChkBxRegistered_OnChecked"/>
    </StackPanel>
</DataTemplate>

然后,您可以在事件处理程序中编写已检查的处理逻辑(在xaml.cs文件中):

private void ChkBxRegistered_OnChecked(object sender, RoutedEventArgs e)
{
    // Your checked handling code goes here
}