private void SelectedGateway_Event(object sender, SelectionChangedEventArgs e) { if (e.AddedItems.Count > 0) { var item = e.AddedItems[0] as OneServerInfo; this.CurrentGateway.Text = item.HostName; var idx = GatewayList.IndexOf(item); var cnt = GatewayList.Count; if (idx >= 0) { var minShow = MinItemShowed; var maxShow = MinItemShowed + NumberItemShowed - 1; var midShow = (minShow + maxShow) / 2; var diff = idx - midShow; if (diff != 0) { var newMinShow = MinItemShowed; OneServerInfo scrollItem = null; if (diff < 0) { newMinShow = Math.Max(0, MinItemShowed + diff); } else { maxShow = Math.Min(cnt - 1, MinItemShowed + diff + NumberItemShowed - 1); newMinShow = Math.Max(0, maxShow - NumberItemShowed + 1); } if (newMinShow != MinItemShowed) { int scrollidx = 0; if (diff < 0) { scrollItem = GatewayList[newMinShow]; scrollidx = newMinShow; } else { scrollItem = GatewayList[maxShow]; scrollidx = maxShow; } MinItemShowed = newMinShow; this.ViewOfGateway.ScrollIntoView(scrollItem); } } } } }
private void AddGateway(String hostname, String info) { var serverInfo = new OneServerInfo(); serverInfo.HostName = hostname; serverInfo.HostInfo = info; OneServerInfo oldServer; if (GatewayAdded.TryRemove(hostname, out oldServer)) { this.GatewayList.Remove(oldServer); } var priorInfo = this.GatewayAdded.GetOrAdd(hostname, serverInfo); if (Object.ReferenceEquals(priorInfo, serverInfo)) { this.GatewayList.Add(serverInfo); } }