繁体   English   中英

wp7列表框元素点击“发送者”对象唯一性

[英]wp7 listbox element tap 'sender' object uniqueness

listboxitem内部发件人出现了一种奇怪的情况(我只是认为这是发件人的责任,但不确定...)

ListBox有ItemTemplate

<ListBox x:Name="list">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel x:Name="stack_panel">
                    <Image Source="{Binding ImageSource}" Tap="Image_Tap"></Image>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

ListBox中的每个项目都有一些带有点击事件的图像:

private void Image_Tap(object sender, GestureEventArgs e)
{
   Image i = (Image)sender;
   i.Source = new BitmapImage(new Uri("Images/yellow.png", UriKind.RelativeOrAbsolute));
}

此外,还有一个用于轻松更改图像的

public class listItems
{
    public string ImageSource { get; set; }
}

对。 现在,我准备在列表框中添加一些元素:

for (int i = 0; i < 100;i++)
   list.Items.Add(new listItems
   {
       ImageSource = "Images/black.png"
   });

因此,让我们单击第零个太阳图像:

图片1

一切都好! 让我们继续,然后单击第二张图片:

图片2

是的,阳光灿烂..但是..停下来,那是什么? 0_o

在此处输入图片说明

我没有单击该项目,但此图像已更改! 这种情况不仅发生在项目上,也发生在其他一些随机项目上(53、81,...)

你怎么看待这件事? 发送者可以参考许多元素吗?

你怎么看待这件事?

默认情况下,列表框控件会重用可视项以优化性能。 您可以根据需要将其关闭,但是对于100个项目,性能当然会下降。

有更好的解决方案。 除了选择要执行的操作外,还应该将选择状态存储在模型中的某个位置,而不只是存储在可视树中。

您的商品类别可能是:

public class listItems: INotifyPropertyChanged
{
    bool _selected = false;
    public bool isSelected
    {
        get { return _selected; }
        set 
        {
            if( value == _selected )
                return;
            _selected = value;
            var pc = this.PropertyChanged;
            if( null != pc )
                pc( this, new PropertyChangedEventArgs( "ImageSource" ) );
        }
    }

    public string ImageSource { get { return _selected ? "Images/yellow.png" : "Images/black.png"; } }

    public event PropertyChangedEventHandler PropertyChanged;
}

INotifyPropertyChanged接口允许通知视觉树有关属性更改的信息。

这是点击处理程序:

void Image_Tap( object sender, GestureEventArgs e )
{
    Image img = (Image)sender;
    listItems item = (listItems)img.DataContext;
    item.isSelected = true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM