
组一个 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"
xmlns:x="http://schemasmicrosoftcom/winfx/2006/xaml"
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绑定数据源对象 与数据源更新同步、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)