gpt4 book ai didi

c# - 从 View 中 ListBox 中删除的文件更新 ViewModel 中的 ObservableCollection - WPF

转载 作者:行者123 更新时间:2023-12-03 10:42:58 27 4
gpt4 key购买 nike

我试图找出如何在用户控件的列表框中处理拖放的文件并将它们绑定(bind)以更新我的 ViewModel 中的 ObservableCollection。

这是我在 XAML 中的列表框:

    <ListBox x:Name="listDrop" Height="50" Margin="0,0,0,0"  AllowDrop="True" Drop="dropfiles"  >

</ListBox>

现在代码隐藏:
public partial class ProcessXML : UserControl
{


public ProcessXML()
{
InitializeComponent();


}

private void dropfiles(object sender, DragEventArgs e)
{


string[] droppedFiles = null;

if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
droppedFiles = e.Data.GetData(DataFormats.FileDrop, true) as string[];
}

if ((null == droppedFiles) || (!droppedFiles.Any())) { return; }

listDrop.Items.Clear();

foreach (string s in droppedFiles)
{
listDrop.Items.Add(s);
}


}
}

这列出了被删除文件的路径,工作正常,但我如何发送该信息或使用它来处理它?

我想将此数据发送到我的 Viewmodel,理想情况下发送到 ObservableCollection,然后处理每个项目,但我一直在摸不着头脑,找不到方法。我将如何做到这一点?

最佳答案

您的代码中没有任何内容表明您甚至有一个 View 模型,或者您使用它的目的。我会假设——我怀疑是错误的——它是 DataContext对于用户控件。

如果您希望您的 View 模型在文件被删除时执行某些操作,您可以让它处理 CollectionChanged其事件DropFiles集合,或者你可以给它一个方法让文件放置处理程序调用。

private void dropfiles(object sender, DragEventArgs e)
{
string[] droppedFiles = null;

if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
droppedFiles = e.Data.GetData(DataFormats.FileDrop, true) as string[];
}


if ((null == droppedFiles) || (!droppedFiles.Any())) { return; }

var myVM = DataContext as MyViewModel;

// MyViewModel.DropFiles should be ObservableCollection<String>
myVM.DropFiles.Clear();

foreach (string s in droppedFiles)
{
myVM.DropFiles.Add(s);
}
}

备用:
private void dropfiles(object sender, DragEventArgs e)
{
string[] droppedFiles = null;

if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
droppedFiles = e.Data.GetData(DataFormats.FileDrop, true) as string[];
}


if ((null == droppedFiles) || (!droppedFiles.Any())) { return; }

var myVM = DataContext as MyViewModel;

myVM.DoFileDrop(droppedFiles);
}

MyViewModel.cs
public void DoFileDrop(IEnumerable<String> filePaths)
{
DropFiles.Clear();
foreach (var s in filePaths)
DropFiles.Add(s);

// Do other stuff if you want to
}

XAML
<ListBox 
x:Name="listDrop"
Height="50"
Margin="0,0,0,0"
AllowDrop="True"
Drop="dropfiles"
ItemsSource="{Binding DropFiles}"
/>

关于c# - 从 View 中 ListBox 中删除的文件更新 ViewModel 中的 ObservableCollection - WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46653034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com