(急)wpf listview绑定数据源对象 与数据源更新同步

(急)wpf listview绑定数据源对象 与数据源更新同步,第1张

组一个 FileInfo 构成的集合, 而此集合实现了 INotifyCollectionChanged 介面 (interface)

最简单的,例如:

public class MyFileInfo :SystemCollectionsObjectModelObservableCollection<SystemIOFileInfo>

{

public void Add(string szFile)

{

if (SystemIOFileExists(szFile)) baseAdd(new SystemIOFileInfo(szFile));

}

public void Add(string[] szFiles)

{

foreach (string s in szFiles)

if (SystemIOFileExists(s)) baseAdd(new SystemIOFileInfo(s));

}

}

上面就是一个 MyFileInfo 的集合类,继承自 ObservableCollection, ObservableCollection 是一个实现了 INotifyCollectionChanged 的介面

然后在你的 xaml 中:

<Window

xmlns="http://schemasmicrosoftcom/winfx/2006/xaml/presentation&quot;

xmlns:x="http://schemasmicrosoftcom/winfx/2006/xaml&quot;

x:Class="WpfApplication2Window1"

x:Name="Window"

title="Window1"

Width="720" Height="300"

WindowStartupLocation="CenterScreen"

xmlns:lx="clr-namespace:WpfApplication2"

>

<!-- 上 2 行中的 xmlns:lx 根据你自己的情形改变 -->

<WindowResources>

<lx:MyFileInfo x:Key="mi"/>   <!-- 集合资源,你也可以在代码中动态构造 -->

</WindowResources>

<StackPanel x:Name="LayoutRoot">

<ListView IsSynchronizedWithCurrentItem="True" x:Name="myLV" ItemsSource="{StaticResource mi}" >

<ListViewView>

<GridView>

<GridViewColumn Header="Click to delete">

<GridViewColumnCellTemplate>

<DataTemplate>

<Button Click="OnDeleteItem" Content="Delete" Tag="{Binding}"/>

</DataTemplate>

</GridViewColumnCellTemplate>

</GridViewColumn>

<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=Name}"/>

<GridViewColumn Header="Attributes" DisplayMemberBinding="{Binding Path=Attributes}"/>

<GridViewColumn Header="Creation" DisplayMemberBinding="{Binding Path=CreationTime}"/>

<GridViewColumn Header="Last Access" DisplayMemberBinding="{Binding Path=LastAccessTime}"/>

<GridViewColumn Header="Last Write" DisplayMemberBinding="{Binding Path=LastWriteTime}"/>

<GridViewColumn Header="Length" DisplayMemberBinding="{Binding Path=Length}"/>

<GridViewColumn Header="Read Only">

<GridViewColumnCellTemplate>

<DataTemplate>

<CheckBox IsChecked="{Binding Path=IsReadOnly, Mode=OneWay}" IsEnabled="False"/>

</DataTemplate>

</GridViewColumnCellTemplate>

</GridViewColumn>

</GridView>

</ListViewView>

</ListView>

<Button Content="Add some" HorizontalAlignment="Center" Click="Button_Click"/>

</StackPanel>

</Window>

相关的按钮事件 (Add some 和 Delete):

private void Button_Click(object sender, RoutedEventArgs e)

{

MyFileInfo mi = WindowResources["mi"] as MyFileInfo;

MicrosoftWin32OpenFileDialog ofd = new MicrosoftWin32OpenFileDialog();

ofdMultiselect = true;

ofdShowDialog();

miAdd(ofdFileNames);

}

private void OnDeleteItem(object sender, RoutedEventArgs e)

{

(WindowResources["mi"] as MyFileInfo)Remove((sender as Button)DataContext as SystemIOFileInfo);

}

// WindowResources["mi"] 是因为 mi 是 Window的资源

// 如果放在其他地方,自行变更

// 例如 放在 Appxaml 中就用 AppCurrentResources["mi"]

//另外, 如果需要对档案的实时监控(例如,添加一些档案到 MyFileInfo 集合后,有人对这些档案进行了 删除/修改 等 *** 作,你可以使用 SystemIOFileSystemWatcher 来辅助 MyFileInfo 类,在接收到这些 *** 作时(引发的事件中)对 MyFileInfo 集合中的项进行更新。 这个例子只是一种基本的实现,更祥细的方面就不必再写了,因为已不是 wpf 的范围了

以下是运行时的效果:

以上就是关于(急)wpf listview绑定数据源对象 与数据源更新同步全部的内容,包括:(急)wpf listview绑定数据源对象 与数据源更新同步、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9620850.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存