【问题标题】:Writing .txt file on ListBox在 ListBox 上写入 .txt 文件
【发布时间】:2014-03-28 23:33:19
【问题描述】:

我要在 ListBox 中写出一个文本文件,但我得到的只是一个列表“BabyName”。我的代码如下所示:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    public void FirstDecadeTopNames_Loaded(object sender, RoutedEventArgs e)
    {
        FileStream fs = new FileStream(@"D:\Dokumenter\Skole\6. semester\GUI\Exercises\Exercise4\WpfApplication1\04-babynames.txt", FileMode.Open);
        StreamReader sr = new StreamReader(fs, Encoding.Default);
        List<BabyName> babyNames = new List<BabyName>();

        while (!sr.EndOfStream)
        {
            BabyName name = new BabyName(sr.ReadLine());
            babyNames.Add(name);
            FirstDecadeTopNames.Items.Add(name);
        }
    }
}

我假设我没有将 StreamReader 放入我的列表中,但我看不出我做错了什么。

更新:

这是 ListBox 的 XAML:

<ListBox Name="FirstDecadeTopNames"
         Margin="10"
         Loaded="FirstDecadeTopNames_Loaded" >
</ListBox>

【问题讨论】:

  • 你能展示你的 XAML 吗?您是否正确绑定了属性?因为BabyName 是一个类而不是单个值,所以它不会显示。这是我的answer,它展示了如何实现这一目标。
  • 嗯...您的列表框的名称是什么?没有将列表框项目添加到列表框的代码,您只需创建 BabyName 对象的列表。
  • @Robert:这条线做到了:FirstDecadeTopNames.Items.Add(name);.
  • @Abbas 哦,是的,当然,这是我的 ListBox 的 XAML:&lt;ListBox Name="FirstDecadeTopNames" Margin="10" Loaded="FirstDecadeTopNames_Loaded" &gt;&lt;/ListBox&gt;

标签: c# wpf listbox


【解决方案1】:

您没有向我们展示声明通用列表 Babyname 的代码,但我认为您不需要使用它,而是:

List <string> names=new List<string>();

public void FirstDecadeTopNames_Loaded(object sender, RoutedEventArgs e)
{
    FileStream fs = new FileStream(@"D:\Dokumenter\Skole\6. semester\GUI\Exercises\Exercise4\WpfApplication1\04-babynames.txt", FileMode.Open);
    StreamReader sr = new StreamReader(fs, Encoding.Default);

    while (!sr.EndOfStream)
    {
        names.Add(sr.ReadLine());           
    }
    FirstDecadeTopNames.ItemSource=names;
}

【讨论】:

  • 尝试此操作时,它会在一段时间内显示以下内容:type 'string' is not assignable to parameter type 'BabyName'?
  • 当使用您的解决方案时,它只输出一个空白列表?那里有一个滚动条,所以我假设它正在输出列表的所有行,但里面什么都没有。
  • 我设法修复了它!问题似乎出在我的 XAML 文件中。我只需要添加一个Loaded="FirstDecadeTopNames_Loaded" 感谢您的帮助!
【解决方案2】:

我认为您应该像这样在 listBox 中使用 DisplayMemberPath 属性:

<ListBox DisplayMemberPath="FieldName"...>

【讨论】:

    【解决方案3】:

    当您在没有正确路径的情况下在 WPF 中使用绑定时,它将显示您正在绑定的任何内容的 .ToString()。在您的情况下,它是 list&lt;BabyName&gt;,因此它仅显示 BabyName 但不显示值。

    例如,如果你有

    Class BabyName
    {
      public string Name{get;set;}
    }
    

    然后使用{Binding Path="Name"}绑定

    【讨论】:

      猜你喜欢
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2012-03-04
      相关资源
      最近更新 更多