2012-09-13 93 views
0

當我從列表中選擇一個項目時,整個選擇過程會繼續兩次。列表框選擇保持循環

private void serving_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) 
{ 
    try 
    { 
     Debug.WriteLine("Serving added to diary"); 
     login(null, null); 
    } 
    catch (WebException) 
    { 
     Debug.WriteLine(e.Error); 
    } 
    ServingList.SelectedIndex = -1; 
} 

當我離開ServingList.SelectedIndex = -1;時,該過程繼續進行一次。但我需要選定的索引回到-1。

我錯過了什麼?

上的SelectionChanged

處理程序:

private void ServingList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     Debug.WriteLine("\n[#] ServingList_SelectionChanged"); 
     Debug.WriteLine("Selected item:" + ServingList.SelectedIndex); 
     Debug.WriteLine("ID of latest TP: " + tp.id); 

     String itemid = tp.id; 
     Produkt temp = (Produkt)ServingList.SelectedItem; 

     if (servingid.Length < 1) 
     { 
      servingid = temp.servingid; 
     } 

     WebClient addserving = new WebClient(); 
     addserving.Credentials = new NetworkCredential(username.Text, passwort.Password); 

     addserving.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1"); 
     addserving.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
     addserving.UploadStringAsync(new Uri("http://fddb.info/api/v8/diary/add_item.xml?apikey=ICPOKUI83555PU43"), "&item_id=" + itemid + "&serving_id=" + servingid); 
     addserving.UploadStringCompleted += new UploadStringCompletedEventHandler(serving_UploadStringCompleted); 
     Pivot.SelectedIndex = 0; 

    } 
+0

你是什麼意思的「選擇過程」? – sll

+0

當我從列表中選擇一個項目時,該項目將被添加到其他列表中。但是,這會發生兩次上面的代碼。 – Clue

+0

ServingList上是否有任何事件處理程序? – sll

回答

0

你引起infinate循環。

你有你的列表框,並改變它導致動作

更改X>動作X>手柄X>更改X(-1)>動作X

等等

您需要有某種形式的突破,以循環的一個條件

private void serving_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e) 
{ 

    //Break condition 
    if (ServingList.SelectedIndex != -1) 
    { 
     try 
     { 
      Debug.WriteLine("Serving added to diary"); 
      login(null, null); 
     } 
     catch (WebException) 
     { 
      Debug.WriteLine(e.Error); 
     } 
     ServingList.SelectedIndex = -1; 
    } 
} 

通過這樣做,你只把它當你需要爲-1,否則會持續不斷地設置所選指標到-1,儘管它已經被設置。

+1

不一定是無限的;如果'SelectedIndex'屬性被合理編程,它只會在值發生變化時纔會調用已更改的事件(它不會在變爲'-1'之後)。這將與OP描述的行爲相匹配,即在第一次分配「-1」之後再多一次呼叫。 –

+0

我剛剛測試過這個方法,但現在,由於某些原因,selectedIndex從-1開始。 – Clue