修复ComboBox无法绑定可观察集合的问题

时间:2012-10-12 14:17:49

标签: .net wpf binding combobox

我有一个带有GridView列的ComboBox:

...
            <GridView AllowsColumnReorder="True" ColumnHeaderToolTip="Info test">
               <GridViewColumn Header="Number" Width="120">
                  <GridViewColumn.CellTemplate>
                     <DataTemplate>
                        <ComboBox ItemsSource="{Binding Path=extensions}" Width="105" IsEditable="True" HorizontalAlignment="Center" Margin="0,0,0,0" BorderThickness="0">
                           <ComboBox.Resources>
                              <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">15</sys:Double>
                           </ComboBox.Resources>
                        </ComboBox>
                     </DataTemplate>
                  </GridViewColumn.CellTemplate>
               </GridViewColumn>
            </GridView>
...

在后面的代码中,“extensions”是一个ObserverableCollection<string>,它被100%初始化并填充(这是在类构造函数中):

public partial class MyForm : Window
{
   ...
   public ObservableCollection<string> extensions;
   ...

   public MyForm()
   {
      ...
      Initialize();
   }

   private Initialize()
   {
       extensions = new ObservableCollection<string>();
       extensions.Add("x100");
       extensions.Add("x101");
   }
}

但是当组合框出现时应用程序运行时,绑定永远不会发生。完成/正确需要哪些额外的步骤?

1 个答案:

答案 0 :(得分:2)

首先不要使用公共字段,而是使用属性。据我所知,公共字段不适用于绑定。

public ObservableCollection<string> extensions {get; private set;}

其次,组合框的datacontext可能未设置为MyForm实例。 试试这个

<ComboBox ItemsSource="{Binding Path=extensions, RelativeSource={RelativeSource AncestorType={x:Type MyForm}}}" ... >