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