-->

DataGridComboBoxColumn绑定到列表(DataGridComboBoxColumn

2019-10-20 02:40发布

我想枚举值列表绑定到“DataGridComboBoxColumn”。 我已经尝试了很多,但没有真正的作品。

以下是我有:

视图模型类:

public class ViewModel
    {

        public ViewModel()
        {
            TestCollection= new ObservableCollection<MyEnum>();
            AnyClasses = new ObservableCollection<AnyClass>();

            //... fill AnyClasses with stuff...

            TestCollection.Add(MyEnum.Value1);
            TestCollection.Add(MyEnum.Value2);
            TestCollection.Add(MyEnum.Value3);
            TestCollection.Add(MyEnum.Value4);
            TestCollection.Add(MyEnum.Value5);

        }

        public ObservableCollection<MyEnum> TestCollection { get; set; }
       public ObservableCollection<AnyClass> AnyClasses { get; private set; }

}

我的枚举:

public enum MyEnum
    {
        Value1,
        Value2,
        Value3,
        Value4,
        Value5
    }

代码隐藏:

 public partial class WPFWindow
    {
        private ViewModel Vm { get; set; }

        public WPFWindow() 
        { 
            InitializeComponent(); 
            Vm = new ViewModel(); 
            DataContext = Vm; 
        }
...
    }

最后的XAML:

<DataGrid AutoGenerateColumns="False" Height="289" x:Name="dataGridAnything" ItemsSource="{Binding AnyClasses}" >
  <DataGrid.Columns>
    <DataGridComboBoxColumn Width="200" Header="Optionen" ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}, Path=DataContext.TestCollection}" SelectedValuePath="Value"/>
  </DataGrid.Columns>
</DataGrid>

如果我启动项目中,没有显示在DataGridComboBoxColumn。 我做错了什么? THX对您有所帮助。

编辑:您可以下载该项目(与VS 2013内置)这里: 下载

Answer 1:

使用ObjectDataProvider在提到这个例子 。 这是结合枚举组合框,因为您不必手动填写枚举集合在你的代码的首选方式。

声明ObjectDataProvider在你的资源:

<ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
    <ObjectDataProvider.MethodParameters>
        <x:Type Type="{x:Type l:MyEnum}"/>
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

(你必须声明你的局部命名空间lcore命名空间: xmlns:core="clr-namespace:System;assembly=mscorlib"

然后绑定DataGridComboBoxColumn吧:

<DataGridComboBoxColumn Width="200" Header="Optionen" ItemsSource="{Binding Source={StaticResource myEnum}}" SelectedValuePath="Value"/>

编辑

既然你已经修改枚举集合中运行时,看看这个问题

总之,它是一个已知的问题DataGridComboBoxColumn 。 你必须改变其元素的风格:

<DataGridComboBoxColumn Width="200" Header="Optionen">
    <DataGridComboBoxColumn.ElementStyle>
        <Style>
            <Setter Property="ComboBox.ItemsSource" 
                                    Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, 
                                Path=DataContext.TestCollection}" />
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style>
            <Setter Property="ComboBox.ItemsSource" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, 
                                Path=DataContext.TestCollection}" />
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>


文章来源: DataGridComboBoxColumn binding to List