0

假设您有ListView以下内容:

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

ListBox可以重新排序,并且工作正常。我只是想知道为什么在Toggled重新订购商品时会触发该事件ListView

事实上,我的Toggled事件包含刷新的代码ListView,所以当我拖动项目时,ListView刷新和拖放失败。

如果有人有建议...在此先感谢!

4

1 回答 1

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
}

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

于 2017-03-22T20:01:38.620 回答