【问题标题】:Reading Data From WPF ListView. C#从 WPF ListView 读取数据。 C#
【发布时间】: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&lt;StackItems&gt; 并将 ListView 的 ItemsSource 属性data-bind 添加到该集合。在网上搜索 MVVM。
  • 还请注意,您通常不会在 WPF 应用程序中使用类型 Image,因为它来自 WinForms。请改用ImageSource

标签: c# wpf listview


【解决方案1】:

简而言之,您应该将一组项目(每行一个)数据绑定到ListView.ItemsSource 属性:

<ListView ItemsSource="{Binding SomeCollection}">
    <ListView.View>
        <!-- Define your view here -->
    </ListView.View>
</ListView>

如果你这样做,那么访问项目就这么简单(使用 Linq):

var firstItem = SomeCollection.First();

对这种情况的改进是将与数据绑定集合上的对象相同类型的另一个属性数据绑定到ListView.SelectedItem 属性:

<ListView ItemsSource="{Binding SomeCollection}" SelectedItem="{Binding CurrentItem}">
    <ListView.View>
        <!-- Define your view here -->
    </ListView.View>
</ListView>

这样做将使您能够从ListView 中访问当前选定项目的属性,如下所示:

int someValue = CurrentItem.SomeProperty;

请参阅 MSDN 上的ListView Class 页面以获取更多帮助。

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多