在我的程序中,我有一個TreeView
,它是通過使用ObservableCollection
通過ViewModel實現的。每個集合都有一個名爲Rank
的屬性。這應該作爲收集物品的索引。更改ViewModel中ObservableCollection的屬性而不選擇它
在this question,我能得到我的TreeView
節點使用ObservableCollection.Move();
然而,爲了交換位置,交換節點的地方後,我需要糾正/更改節點的秩的價值,從而使我可以繼續操縱它們。
這應該有助於解釋我在做什麼:
視圖 - 代碼隱藏:
//Button Click Event -- This makes the Selected Node switch places with the node above it
private void shiftUp_Click(object sender, RoutedEventArgs e)
{
//if a node is selected
if (UCViewModel.TreeViewViewModel.SelectedItem != null)
{
//If the selected Node is not in the 0 position (can not move up anymore)
if (UCViewModel.TreeViewViewModel.Collection<TreeViewModel>.IndexOf(UCViewModel.TreeViewViewModel.SelectedItem) != 0)
{
int oldIndex = UCViewModel.TreeViewViewModel.SelectedItem.Rank;
int newIndex = oldIndex--;
UCViewModel.TreeViewViewModel.Collection<TreeViewModel>.Move(oldIndex, newIndex);
//**Pseudo code trying to explain what I want to do
//**get item at specific index and change the Rank value
//Collection item at index (newIndex).Rank -= 1;
//Collection item at index (oldIndex).Rank += 1;
}
}
}
用戶控件 - XAML:
<TreeView ItemsSource="{Binding TreeViewViewModel.Collection<TreeModel>}" ... />
我怎樣才能糾正移動後的值爲Rank
?
編輯
如上所述,我在我的TreeView
的數據模型Rank
屬性。 @Noctis的答案建議在Rank
值更改後使用該屬性對TreeView
進行排序。我在這個主題上最喜歡的問題是here。
我已將SortObservableCollection
類添加到我的程序中,所以現在剩下的就是操縱排名值並進行排序。正確的位置是否來自代碼隱藏?基本上上述^部分來自哪裏?如果是這樣的話,我會有點困惑的確切電話...
代碼隱藏:
private void shiftUp_Click(object sender, RoutedEventArgs e)
{
//if a node is selected
if (UCViewModel.TreeViewViewModel.SelectedItem != null)
{
//Moves the selectedNode down one (Up visually, hence shiftUp)
UCViewModel.TreeViewViewModel.SelectedItem.Rank--;
//How would I get the node below the selected one and change the Rank?
//This would be the call to sort. Which needs to be called for the collection
//For some reason, sort does not come up for the collection...
//UCViewModel.TreeViewViewModel.Collection.**Sort(...);
}
}
他們是'TreeView'的模型內聲明的公共屬性,但如何將改變' Rank'讓他們自動重新排序?我問這是因爲我創建了「Rank」。它不會自動轉換爲收集索引。 –
那麼,看看[MSDN]中的這篇文章(http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.sort.aspx)。如果您提供自己的TreeViewNodeSorter,則可以按照您想要的方式對樹進行排序。 – Noctis
該文章適用於Windows窗體 –