C# UWP ToggleSwitch in ListView

时间:2017-03-22 18:42:11

标签: c# xaml listview uwp toggleswitch

Suppose you have the ListView below :

<ListView x:Name="ListViewActiveAssets" Margin="10,10,10,10" CanReorderItems="True" AllowDrop="True" CanDragItems="True" SelectionMode="Extended" DragItemsStarting="ListViewActiveAssets_DragItemsStarting" DragItemsCompleted="ListViewActiveAssets_DragItemsCompleted">
<ListView.ItemTemplate>
    <DataTemplate x:DataType="local:Asset">
        <Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="36" />
                <ColumnDefinition Width="36" />
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition Width="108" />
            </Grid.ColumnDefinitions>

            <TextBlock Text="&#xE700;" FontFamily="Segoe MDL2 Assets" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <TextBlock Text="{x:Bind AssetType}" FontFamily="Segoe MDL2 Assets" Grid.Column="1" VerticalAlignment="Center" HorizontalAlignment="Center"/>
            <TextBlock Text="{x:Bind Name}" Grid.Column="2" FontSize="18" VerticalAlignment="Center" Padding="0,0,5,0"/>
            <TextBlock Text="{x:Bind StartDate}" Grid.Column="3" FontSize="16" VerticalAlignment="Center" Padding="0,0,5,0"/>
            <TextBlock Text="{x:Bind EndDate}" Grid.Column="4" FontSize="16" VerticalAlignment="Center" Padding="0,0,5,0"/>
            <ToggleSwitch Grid.Column="8" x:Name="ToggleSwitchEnable" IsOn="{x:Bind IsEnabledSwitch}" OnContent="On" OffContent="Off" Padding="5,0" Toggled="ToggleSwitchEnable_Toggled"/>

        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>

This ListBox can be reordered and this work fine. I simply would like to know why the Toggled event is fired when I reorder an item in ListView ?

Indeed, my Toggled event contains code that refresh the ListView, so when I'am dragging item, the ListView refreshes and the drag&drop fail.

If someone have a suggestion... Thanks in advance!

1 个答案:

答案 0 :(得分:0)

尝试在您的类中添加一个本地bool,并在构造函数中将其设置为false:

private bool toggling;

public myPage()
{
    toggling = false;
}

然后,在OnToggled方法中,首先将切换设置为true,然后在方法结束时将其设置为false。

void ToggleSwitchEnable_Toggled(object sender, EventArgs e) 
{
    toggling = true;
    // Your code
    toggling = false;
}

然后,您可以将刷新方法设置为仅在切换为false时执行:

void refresh()
{
    if(toggling)
        return;
    //Your code
}

每当您切换开关时,这将导致跳过刷新命令