【问题标题】:When does a ComboBox receive its Items if it is bound to ObservableCollection?如果 ComboBox 绑定到 ObservableCollection,它什么时候收到它的 Items?
【发布时间】:2016-05-23 21:34:15
【问题描述】:

我正在尝试一种保存/加载机制,以便在业务应用程序中重复使用。我已经为使用属性来描述我的类属性来读/写ObservableCollection<> 到/从xml 奠定了基础。那部分正在工作。我可以将ObservableCollection 保存到XML,然后在下次运行程序时将XML 加载回ObservableCollection

这是我的问题。我有一个ComboBox,其ItemsSource.DataContext = ObservableCollection<Flag>; 当我运行该程序时,它可以很好地接受绑定,但 ComboBox 本身直到稍后才会自行填充。我想将 SelectedItem 设置为我从 XML 加载的 ObservableCollection<Flag> 中的第一项。但是什么也没发生,因为当程序执行它的启动方法时,Items.Count 仍然是0。我猜ComboBox 在获得焦点之前不会自行填充。我该如何解决这个问题?我可以强制 ComboBox 自行填充吗?我试过cb_ARDAR_ARFlag.Items.Refresh();

XAML:

<ComboBox Name="cb_ARDAR_ARFlag"
          ItemsSource="{Binding}"
          SelectionChanged="cb_ARDAR_ARFlag_SelectionChanged">
   <ComboBox.ItemTemplate>
      <DataTemplate>
          <TextBlock Text="{Binding Flag_Desc}"/>
      </DataTemplate>
   </ComboBox.ItemTemplate>
</ComboBox>

相关代码:

public MainWindow()
    {
        InitializeComponent();

        setDataBinding();

        loadSavedData();
    }

    private void setDataBinding()
    {
        //Returns ObservableCollection<Flag>
        cb_ARDAR_ARFlag.DataContext = Flag.getOCAvailableFlags(); 
    }
    private void loadSavedData()
    {
        //When it gets here the ItemCount is 0 so nothing happens.
        //Refresh didn't help
        cb_ARDAR_ARFlag.Items.Refresh();
        Flag f = Enforcement_Save.loadOCARFlag().First();
        cb_ARDAR_ARFlag.SelectedItem = f;
    }

在这一点上,我仍然不确定最后的代码能否成功识别要选择的正确“标志”项,或者我是否最终会使用 Linq。顺便说一句,这让我想到了另一个问题。你能以某种方式将Linq 转为ComboBox.Items 吗?

【问题讨论】:

  • 如果你使用 Bindings 和 viewmodel,所有这些东西都不会成为问题。

标签: wpf combobox selecteditem lazy-initialization


【解决方案1】:

我已经重新创建了您的问题,并且您是正确的,在 loadSavedData 方法中的项目数 = 0。在构造函数完全执行之前,组合框似乎不会被填充。

与此同时,我发现您可以使用 ItemsSource 属性在您希望加载组合框时加载它:

cb_ARDAR_ARFlag.ItemsSource = Flag.getOCAvailableFlags();

【讨论】:

  • 这对我的目的来说很好。为此,不需要通过 DataContext 进行绑定。
猜你喜欢
  • 2013-04-18
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 2019-02-12
  • 2011-10-25
相关资源
最近更新 更多