从 UWP 中的 DataTemplate 生成的 UI 个元素的事件处理

Event Handling for UI elements generated from a DataTemplate in UWP

我正在努力找出如何响应按钮单击以外的任何事件(我可以使用 Command 来处理它们)。

如果从 DataTemplate 创建 ToggleSwitch,我将如何生成 "Toggled" 事件?

摘自 Microsoft 文档 ToggleSwitch Class

XAML:

 <StackPanel Orientation="Horizontal">
        <ToggleSwitch Header="Toggle Switch Example" 
            OffContent="Do work" OnContent="Working" 
            Toggled="ToggleSwitch_Toggled"/>  
        <ProgressRing x:Name="progress1"/>
    </StackPanel>

代码隐藏:

private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
        {
            ToggleSwitch toggleSwitch = sender as ToggleSwitch;
            if (toggleSwitch != null)
            {
                if (toggleSwitch.IsOn == true)
                {
                    progress1.IsActive = true;
                    progress1.Visibility = Visibility.Visible;
                }
                else
                {
                    progress1.IsActive = false;
                    progress1.Visibility = Visibility.Collapsed;
                }
            }
        }

如您在 XAML 中所见,您定义了一个 Toggled 事件处理程序来处理其状态的变化。 事件处理程序是在代码隐藏中自动创建的,您可以向其中添加您的逻辑。

在此示例中,您将发送者对象转换为 ToggleSwitch,您知道它是引发此事件的对象的类型,并且通过检查它的属性,您可以推断出 Switch 是否为 On/Off,并正确处理该状态,就像在上面的示例中所做的那样。

动态生成的 ToggleSwitch 事件:

假设我们的客户是一个 ObservableCollection 属性,您已将其定义为页面的 DataContext。根据它的大小,我们会在您的页面上显示相同数量的 ToggleSwitch,并且所有这些都会重定向到 ToggleSwitch_Toggled.

         <ListBox ItemsSource="{Binding customers}" Width="350" Margin="0,5,0,10">
            <ListBox.ItemTemplate>
                <DataTemplate>
                   <ToggleSwitch Header="Toggle Switch Example" 
                            OffContent="Do work" OnContent="Working" 
                            Toggled="ToggleSwitch_Toggled"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox> 

这是您要找的吗?它可能还不是最有用的实现,因为仍然没有实现逻辑来理解哪个动态创建的 ToggleSwitch 引发了事件(都调用相同的事件处理程序)。

行为: