2011-11-06 72 views
0

我正在寫一個應用程序,它從XML文件中讀取數據,並使用上一個/下一個按鈕來遍歷每條記錄。但是,我想知道如何使用按鈕來選擇隨機記錄。我的上一張/下按鈕如下:如何在CollectionViewSource中選擇隨機視圖編號?

private void Next_Click(object sender, RoutedEventArgs e) 
{ 
     var button = (Button)sender; 
     var cvs = (CollectionViewSource)button.Tag; 
     cvs.View.MoveCurrentToPrevious(); 

     if (cvs.View.IsCurrentBeforeFirst) 
     { 
      cvs.View.MoveCurrentToLast(); 
     } 
} 

private void Previous_Click(object sender, RoutedEventArgs e) 
{ 
     var button = (Button)sender; 
     var cvs = (CollectionViewSource)button.Tag; 
     cvs.View.MoveCurrentToNext(); 

     if (cvs.View.IsCurrentAfterLast) 
     { 
      cvs.View.MoveCurrentToFirst(); 
     } 
} 

private void Random_Click(object sender, RoutedEventArgs e) 
{ 

} 

我到處去尋找一個解決方案,包括微軟的文檔(http://msdn.microsoft.com/en-us/library/system.random.aspx),但我還是難倒。任何幫助將不勝感激。

回答

0

這應該工作:

readonly Random _random = new Random(); 
private void Random_Click(object sender, RoutedEventArgs e) 
{ 
    var button = (Button)sender; 
    var cvs = (CollectionViewSource)button.Tag; 
    var view = cvs.View as CollectionView; 
    if (view != null) 
    { 
     cvs.View.MoveCurrentToPosition(_random.Next(0, view.Count)); 
    } 
} 

在默認所有視圖WPF類不僅實現ICollectionView,但應該是CollectionView子類具有Count能使用。

+0

非常感謝H.B.它讓我感到困惑,爲什麼CollectionViewSource沒有'Count'。但是,您是否如何生成下一個號碼,而不包括當前號碼?我似乎無法找到解決方案。非常感謝。 – duney

+0

@duney:你現在的電話號碼是什麼意思?上面的代碼不使用當前的數字,它只是指定上限和下限。 –

+0

對不起,這可能沒有多大意義。那麼,'CollectionView'號碼被設置爲隨機數嗎?我遇到的問題是,有時當我按隨機時,它會隨機選擇與當前顯示在屏幕上的xml記錄的索引相同的編號,這意味着它不會更改爲不同的記錄......只是同一個。 – duney

0

System.Random是你需要產生隨機數,但你還需要弄清楚你的CollectionView有多少總記錄來得到隨機數 gen的範圍。

東西沿着這些路線:

private void Random_Click(object sender, RoutedEventArgs e) 
{ 
    var count = CollectionView.Count; 
    var random = new System.Random(); 
    var index = random.next(0, count); 
    CollectionViewSource.View.MoveCurrentToPosition(index); 
} 
+0

['Random.Next'](http://msdn.microsoft.com/zh-cn/library/2dx6wyd4.aspx)的上限是排他的,所以' - 1'可能不是這樣的一個好主意。 –

+0

感謝H.B.,在答案中更正了清楚 – kaveman