【发布时间】:2015-02-25 22:44:34
【问题描述】:
如何从 WPF ListView 中读取数据?
这是我的代码。
<ListView x:Name="LVR" AllowDrop="True" PreviewDrop="LVR_PreviewDrop" RenderTransformOrigin="0.505,0.506" Margin="0,0,0,0" Grid.Row="1" Grid.ColumnSpan="3" MouseEnter="LVR_MouseEnter" >
<ListView.View>
<GridView >
<GridViewColumn Header="Status" Width="40">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="index.png" Width="26"></Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="File Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding TBtxt}" FontWeight="Bold" Foreground="Blue" Cursor="Hand" Height="30" TextAlignment="Left" HorizontalAlignment="Center"></TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
我正在像这样将项目插入到列表视图中。
void Insert()
{
WinForms.OpenFileDialog ofd = new WinForms.OpenFileDialog();
ofd.Multiselect = true;
ofd.Title = "Select .TXT File";
ofd.FileName = "";
ofd.Filter = "TXT | *.txt";
if (ofd.ShowDialog() == WinForms.DialogResult.OK)
{
foreach (var filename in ofd.FileNames)
{
if (System.IO.Path.GetExtension(filename).ToUpperInvariant() == ".txt")
{
LVR.Items.Add(new StackItems { TBtxt = filename });
}
}
}
}
class StackItems
{
public string TBtxt { get; set; }
public Image imgg { get; set; }
}
添加完文件后,我的 ListView 将如下所示。
|状态 |文件名|
|[图片]|测试.txt |
|[图片]| test1.txt|
(对不起。我没有足够的声誉来发布图片)
现在我将如何从第二列读取“文件名”?
我对 WPF 很陌生。 提前致谢。
【问题讨论】:
-
不确定“从 ListView 读取”到底是什么意思,但您通常会访问 StackItems 类(也就是您的视图模型),并从其 TBtxt 属性(应该有更好的名字)。与其将 StackItems 实例添加到 ListView 的 Items 集合然后忘记它们,不如将它们添加到
ObservableCollection<StackItems>并将 ListView 的 ItemsSource 属性data-bind 添加到该集合。在网上搜索 MVVM。 -
还请注意,您通常不会在 WPF 应用程序中使用类型
Image,因为它来自 WinForms。请改用ImageSource。