将String列表绑定到DataGridTemplateColumn的ComboBox

时间:2014-06-30 07:40:54

标签: wpf combobox observablecollection datagridtemplatecolumn celleditingtemplate

问题可能看起来很容易,但我无法得到它,我尝试了我发现的一切。它适用于类的列表,因为我可以绑定我的一个类的属性,但不能绑定一个简单的String的ObservableCollection。

这是我在Xaml中的代码:

<DataGridTemplateColumn x:Name="VT" Header="VT" Width="*">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox SelectedItem="{Binding ListOfString}"
                      SelectedValuePath="ListOfString"
                      DisplayMemberPath="ListOfString"
                      ItemsSource="{Binding RelativeSource={RelativeSource 
                                    Mode=FindAncestor,
                                    AncestorType={x:Type UserControl}},
                                    Path=DataContext.ListOfString}"/>
         </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我的代码背后的工作正常,因为当我打开下拉列表时,它显示的内容与内部元素一样多,但行是空的。我也尝试使用像here这样的CellEditingTemplate,但在最好的情况下它具有相同的结果。我想我在那些DisplayMemberPath属性和其他属性上出错了,但我看不出我应该进去的内容。

那么如何正确地将我的ObservableCollection绑定到我的ComboBox?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果你的ListOfString看起来像这样:

  public ObservableCollection<string> ListOfString {get;set;}

然后您应该只删除SelectedValuePath和DisplayMemberPath。因为否则wpf会查找字符串中不存在的Property ListOfString:)

        <ComboBox SelectedItem="{Binding ListOfString}"                     
                  ItemsSource="{Binding RelativeSource={RelativeSource 
                                Mode=FindAncestor,
                                AncestorType={x:Type UserControl}},
                                Path=DataContext.ListOfString}"/>

如果不是这种情况,您应该发布ListOfString属性的代码。

btw你应该重命名SelectedItem属性或集合属性,因为atm都命名为ListOfString。