【问题标题】:How can I set ComboBox DataContext that was loaded from a file, in XAML?如何在 XAML 中设置从文件加载的 ComboBox DataContext?
【发布时间】:2012-08-30 17:02:35
【问题描述】:

我正在尝试理解 Binding,所以我想出了一个非常简单的程序来尝试和测试它。

我的 MainWindow 中有以下元素:

<ComboBox Name="comboBox1" ItemsSource="{Binding ComboItems}" />

在我的代码中,我有以下可观察的集合:

private readonly ObservableCollection<string> comboItems = 
    new ObservableCollection<string>();
public ObservableCollection<string> ComboItems
{
    get {return comboItems; }
} 

只要组合框从一开始就位于 MainWindow XAML 中,我就可以在运行时的任何时候以这种方式成功添加项目:

ComboItems.Clear();
ComboItems.Add("Item");

我的问题是,如果我从文件中加载此 ComboBox,如何更新它?我有以下代码来保存和加载文件:

File.WriteAllText("ComboBox.xaml", saveComboBox)

这只是我存档的最后一行,我还有其他项目似乎与本次讨论无关。

ComboBox comboBox = System.Windows.Markup.Xamlreader.Load(stream) as ComboBox;

这将成功保存并加载我的组合框。 我现在遇到的问题是代码:

ComboItems.Clear();
ComboItems.Add("Item");

不再有效。我正在尝试为我将要做的一个新项目学习数据绑定。这个项目需要为用户界面加载 xaml 文件,我需要在加载后填充 ComboBox。

解决这个问题最简单、最有效的方法是什么?

【问题讨论】:

  • 你的集合代码有点可怕所以我改变了它,字段通常不应该是公开的,如果你有一个 setter 实现INPC。 (也请避免使用“Hi”和“Thank You”。)
  • 感谢您的指正。我只在 WPF 上工作了几个月,并且一直在自学。

标签: c# wpf xaml data-binding combobox


【解决方案1】:

我不知道XamlReader 是否会保留绑定,请阅读文档,它有限制。无论如何,我不建议这样做。如果绑定消失了,您可以在代码中创建一个新的绑定,这当然会部分违背保存它的目的。

【讨论】:

  • 对不起。我应该更具体。组合框出现在我的窗口中,因为我调用 MainGrid.Children.Add(cmbBox)。但是,下拉列表中没有项目。
  • @B-Rad:我不知道 XamlReader 是否会保留绑定,阅读文档,它有限制。无论如何,我不建议这样做。如果绑定消失了,您可以在代码中创建一个新的绑定,当然,这部分违背了保存它的目的。
  • 非常好的点 H.B.!我会看看绑定是否被保留。这很可能是问题所在。
  • 我只是在查看保存的 XAML,看来您是对的。不保留绑定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2016-12-06
相关资源
最近更新 更多