我有一个WPF应用程序,带有问题和答案的表单。问题在文本块中,并在组合框中回答。用户为每个问题选择答案。我需要创建一个带有问题和答案的csv文件。 我打算遍历每个控件并获取问题和答案的值,并创建csv文件,如下所示:
for()
{
String csv = String.Join(Environment.NewLine, txtQuestion.Text +";" + cbAnswer.Text);
}
System.IO.File.WriteAllText(@"C:\Test\Samplec.csv", csv);
这是一个很好的方法吗?
答案 0 :(得分:1)
总之,否这不是一个好方法。对于糟糕的设计/实现,直接访问UI在WPF中是一个很大的危险信号。
您应该有一个项控件绑定到某个包含问题和答案字符串的对象的ObservableCollection
。然后你只需迭代集合:
public class QuestionAnswerPair
{
public String Question { get; set; }
public String Answer { get; set; }
}
.....
ObservableCollection<QuestionAnswerPair> Questions { get; set; }
.....
String csv = String.Join(Questions.Select(qAndA => String.Format("{0};{1}\n", qAndA.Question , qAndA.Answer)).ToArray(), ',');
System.IO.File.WriteAllText(@"C:\Test\Samplec.csv", csv);
XAML片段:
<ItemsControl ItemsSource="{Binding Questions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal"/>
<TextBox Text="{Binding Question}"/>
<TextBox Text="{Binding Answer}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这会生成一种奇怪的csv文件,但它与您的代码非常匹配。我相信你可以弄清楚解析,但随便问你是否有问题。