2012-04-18 90 views
3

編輯#2 /順序:更改顯示(UI)項觀察集合

public void ReverseOrderRegBtns() 
    { 
     ICollectionView view = CollectionViewSource.GetDefaultView(GlobalObservableCol.regBtns); 
     view.SortDescriptions.Add(new SortDescription("ReverseOrder", ListSortDirection.Ascending)); 
     view.Refresh(); 
    } 

不是真的知道如何適應的ICollectionView的中,它也中斷正在做一些邏輯定時器。由於某種原因,它會中斷我的計時,即在創建按鈕時開始計數。

我的應用程序有幾個定時器,以便獲得創建按鈕獲得與可能的新內容更新的秒每x量。

編輯:

數據綁定看起來如下:

<ListBox x:Name="lbRegistration" ItemsSource="{Binding regBtnsReverse, ElementName=Window}" Background="{x:Null}" 

老: 公衆的ObservableCollection RegBtns { 得到 { 如果(GlobalObservableCol.regBtns == NULL){ return new ObservableCollection(); } 回報GlobalObservableCol.regBtns; }}

新(不再工作),相反是在ObserableCol類

public IEnumerable<RegistrationButton> RegBtns 
     { 
      get 
      { 
       return GlobalObservableCol.regBtnsReverse; 
      } 
     } 

我已經創建了IEnumerable在我的一個靜態類,其中的ObservableCollection列表可用。

我似乎不能當我的數據綁定是一個IEnumerable的綁定。如何將位於其他類的NumbersReverse 方法綁定到我的MainWindow.xls?


我有保存自定義樣式的WPF按鈕的的ObservableCollection。得到動態創建

這些項目和自定義滑塊控件(列表框)添加。 例如,按鈕1,按鈕2,按鈕3,...

我想要的就是對面

例如按鈕3,按鈕2,按鈕1. 這聽起來像一個鏈表,但我的整個應用程序已經在使用整個邏輯這個觀察的集合。

當按鈕獲得UI中顯示,最後添加的按鈕應該放在作爲第一個項目在我的滑塊(這是一個列表框控件)。

到底我能拉這一關?

感謝, PeterP

回答

2
<ListBox ItemsSource="{Binding Foo}"/> 

private ObservableCollection<RegButtton> RegBtns = new...; 

public ICollectionView Foo { get; set; } 

Foo = CollectionViewSource.GetDefaultView(RegBtns); 
Foo.SortDescriptions.Add(new SortDescription("SomePropertyName", ListSortDirection.Ascending)); 
Foo.Refresh(); 
2

某處在你的代碼應該有myCollection.Add(someButton)

myCollection.Insert(0, myButton)代替它,你就完成了。

+0

這實際上工作和替換按鈕在第一個索引,但它打破了我的整個邏輯恐怕。在執行此操作時,我的程序不再有效。 – PeterP 2012-04-18 09:34:40

+0

好,如果程序的其餘部分取決於按鈕的順序,改變像Michal所說的顯示順序絕對是最好的解決方案 – stijn 2012-04-18 09:36:35

+0

好的,謝謝你將考慮到Michal他的解決方案。 – PeterP 2012-04-18 09:49:02

1

我不知道你使用的是什麼框架。我會做這樣的事情在我的視圖模型:

public ObservableCollection<int> Numbers { get; private set; } 
public IEnumerable<int> NumbersReverse 
{ 
    get 
    { 
     return Numbers.Reverse(); 
    } 

} 

,我會用NumbersReverse作爲數據源:

<ListBox Name="listBox1" ItemsSource="{Binding NumbersReverse}"/> 

當然也有這樣做的其他許多方面。你必須找出你的情況什麼是最好的...

編輯: 例如,如果您不關心任何其他用途的項目順序,那麼stijn提供的解決方案要好得多。

+0

我似乎無法去做。反對我的靜態ObservableCollection PeterP 2012-04-18 10:03:42

+0

也許是因爲你使用舊版本的.NET框架。在.NET Framework 3.5中引入了IEnumerable 上的反向操作。您可以更改您的框架的版本,或者您可以創建另一個NumbersReverse屬性,並在for循環中初始化它,將元素從最後一個到最後一個並將它們插入到新列表中。 – 2012-04-18 10:52:56

+0

目前數據綁定通過單例方法發生,也許這就是爲什麼我有問題?當我用IEnumerable和數據庫替換方法時,我沒有看到可見的按鈕。 – PeterP 2012-04-18 11:03:12