簡體   English   中英

在列表視圖上拖放后如何在代碼中更新ObservableCollection-WPF MVVM

[英]How to update ObservableCollection in codeBehind after drag and drop on listview - WPF MVVM

在listView上將Josh Smith的問題用於DnD時遇到了一些困難。

創建視圖時,我在ViewModel中初始化了一個“ DetailTable”的ObservableCollection:

(ListeTables是CollectionViewSource,我在其中初始化和使用我的數據)

public ObservableCollection<DetailTable> ListeTablesDisplay
{
    get
    {
        var l = ListeTables.View.Cast<DetailTable>().ToList();
        return new ObservableCollection<DetailTable>(l);
    }
}

Xaml文件中的listView:

    <ListView Name="ListeViewTables" SelectionMode="Single" 
              AllowDrop="true"
              ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
              ItemsSource="{Binding ListeTablesDisplay, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 
              SelectedItem="{Binding SelectedTable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
              Margin="10,83,831,61">

然后在View CodeBehind中將DnD稱為Josh Smith類:

public DataView()
{
    InitializeComponent();

    new ListViewDragDropManager<DetailTable>(this.ListeViewTables);
}

到目前為止,拖放工作正常,但是在ViewModel中,ObservableCollection的項順序與我在View中所做的工作不一致。

示例:如果將item-3移到第5個位置,則可以使用View,但是當我調試時,我在ObservableCollection中總是將item-3移到第3個位置。

我要做的事情很麻煩,希望有人能幫助我!

謝謝

如果一個人有同樣的問題,只需在ListViewDragDropManager上添加事件ProcessDrop

然后在viewModel中,事件需要手動移動ObservableCollection中的項目索引

    public static void OnProcessDrop(object sender, ProcessDropEventArgs<T> e)
    {
        e.ItemsSource.Move(e.OldIndex, e.NewIndex);

        e.Effects = DragDropEffects.Move;
    }

這是ListViewDragDropManager的指導者的示例-“自定義放置邏輯”以尋求幫助

這是在一般情況下的處理方法。 通過處理Smith的ProcessDrop事件,OP可以使它與Smith的代碼一起工作。

在放置處理程序中,確定目標ListView的ItemsSource是否為null。

如果您有ItemsSource ,請將其ItemsSourceSystem.Collections.IList然后對列表 (而不是Items進行重新排序操作。 忘記此分支中的Items 如果項源是ObservableCollection<T> ,則ListView中的順序將更新。 如果不是,那不是您的問題。 您的代碼使用者提供了錯誤的列表類型,需要發布一個問題,詢問為什么WPF無法從List<T>int[]String或任何其他內容獲得更改通知。

如果沒有ItemsSource ,則只有ListViewItems。 重新訂購Items 簡單。

我從未見過Josh Smith的代碼 ,如果您需要更新,他將是可以與之交談的人。 就個人而言,我使用的是Adorner而不是重新設置列表控件的樣式,但是您可以為這兩種方法辯護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM