首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xceed数据显示组合框

Xceed数据显示组合框
EN

Stack Overflow用户
提问于 2016-11-02 04:57:42
回答 2查看 954关注 0票数 0

我想使用"Xceed DataGrid for WPF“社区版本来显示WPF应用程序中已经对Propertygrid正确的项。

文本框(名称)工作正常,但组合框不工作。问题是组合框没有填充任何东西,也没有正确地设置性别。下面给出了我的简单代码。

XAML:

代码语言:javascript
复制
    <Window.Resources>
            <xcdg:DataGridCollectionViewSource x:Key="mySource" Source="{Binding Path=SelectedEntity}" />
</Window.Resources>
<Grid>
    <xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource mySource}}" AutoCreateColumns="True">
        <xcdg:DataGridControl.Columns>
            <xcdg:Column FieldName="FirstName" Title="First Name" />
            <xcdg:Column  FieldName="Gender" Title="Gender" >
                <xcdg:Column.CellContentTemplate>
                    <DataTemplate x:Name="clmGenderTmp">
                        <ComboBox SelectedValuePath="GenderID"
                            DisplayMemberPath="Name"
                            ItemsSource="{Binding Path=SelectedEntity.Gender, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                            SelectedValue="{xcdg:CellEditorBinding}"/>
                    </DataTemplate>
                </xcdg:Column.CellContentTemplate>
            </xcdg:Column>
        </xcdg:DataGridControl.Columns>
    </xcdg:DataGridControl>
</Grid>

Xaml.cs是:

代码语言:javascript
复制
InitializeComponent();
this.DataContext = new MainWindowViewModel();

数据类是:

代码语言:javascript
复制
using System.ComponentModel;
using Xceed.Wpf.DataGrid;  
public enum Genders { Male, Female  }
public class Person
{
    public Person(string firstName, Genders gender)
    {
        FirstName = firstName;
        Gender = gender;
    }

    [DisplayName("Given name")]
    public string FirstName { get; set; }

    [Browsable(true)]
    public Genders Gender {  get;  set; }
}

视图模型是:

代码语言:javascript
复制
public class MainWindowViewModel
{
    public List<object> SelectedEntity { get; set; }
    public MainWindowViewModel()
    {
        SelectedEntity = new List<object>();                    
        this.SelectedEntity.Add(new Person("Mathew", Genders.Male));
        this.SelectedEntity.Add(new Person("Mark", Genders.Female));
    }
}

EN

回答 2

Stack Overflow用户

发布于 2016-11-02 09:52:24

Window似乎没有属性SelectedEntity。)您想绑定到的是DataContext.SelectedEntity.Gender。无论如何,这根本不起作用,因为您试图将单个值(性别)绑定为ItemsSource

您需要向组合框提供(enum)值的列表。How to bind an enum to a combobox control in WPF?

编辑

由于我的答案显然不够具体,我提供了一个充分的例子:

XAML:

代码语言:javascript
复制
<ItemsControl ItemsSource="{Binding}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock Text="{Binding Firstname}"
                            Margin="10" />
                <ComboBox ItemsSource="{Binding Path=AvailableGenders}"
                            SelectedValue="{Binding Path=Gender}"
                            Grid.Column="1" />
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

PersonViewModel:

代码语言:javascript
复制
public class PersonViewModel : ViewModelBase
{
    private Genders _gender;
    private string _firstname;
    public string Firstname
    {
        get
        {
            return _firstname;
        }
        set
        {
            _firstname = value;
            OnPropertyChanged();
        }
    }

    public Genders Gender
    {
        get
        {
            return _gender;
        }
        set
        {
            _gender = value;
            OnPropertyChanged();
        }
    }

    public List<Genders> AvailableGenders

    {
        get
        {
            return Enum.GetValues(typeof(Genders)).Cast<Genders>().ToList();
        }
    }

}

MainWindow Ctor:

代码语言:javascript
复制
public MainWindow()
    {
    InitializeComponent();

    List<PersonViewModel> persons = new List<PersonViewModel>();


    persons.Add(new PersonViewModel() { Firstname = "John", Gender = Genders.female });
    persons.Add(new PersonViewModel() { Firstname = "Partyboy", Gender = Genders.male });
    persons.Add(new PersonViewModel() { Firstname = "r2d2", Gender = Genders.robot });
    persons.Add(new PersonViewModel() { Firstname = "KlausMaria", Gender = Genders.shemale });

    DataContext = persons;


}
票数 1
EN

Stack Overflow用户

发布于 2016-11-03 02:55:19

我从How to add ComboBox column in XCeed DataGridControl (WPF)得到了一个类似的例子

只要发布我的代码,如果有人面临同样的问题。

ViewModel:

代码语言:javascript
复制
public class ViewModel
{
    public DataTable Persons { get; set; }
    public DataTable Gender { get; set; }
    public ViewModel()
    {
        Persons = new DataTable();
        Persons.Columns.Add("FirstName", typeof(string));
        Persons.Columns.Add("GenderID", typeof(int));

        Persons.Rows.Add("Mathew",1);
        Persons.Rows.Add("Gil", 2);

        Gender = new DataTable();
        Gender.Columns.Add("Name", typeof(string));
        Gender.Columns.Add("GenderID", typeof(int));

        Gender.Rows.Add("Male", 1);
        Gender.Rows.Add("Female", 2);
    }
}

代码背后:

代码语言:javascript
复制
InitializeComponent();
viewModel = new ViewModel();
this.DataContext = viewModel;

XMAL:

代码语言:javascript
复制
<Grid>
    <Grid.Resources>
        <Style TargetType="{x:Type xcdg:GroupByControl}">
            <Setter Property="Visibility" Value="Collapsed"/>
        </Style>
    </Grid.Resources>

    <xcdg:DataGridControl ItemsSource="{Binding Persons}" > 
        <xcdg:DataGridControl.Columns>
            <xcdg:Column x:Name="clmFN" FieldName="FirstName"/>
            <xcdg:Column x:Name="clmGender" FieldName="GenderID">
                <xcdg:Column.CellContentTemplate>
                    <DataTemplate x:Name="clmGenderTmp">
                        <ComboBox SelectedValuePath="GenderID"
                            DisplayMemberPath="Name"
                            ItemsSource="{Binding Path=DataContext.Gender, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                            SelectedValue="{xcdg:CellEditorBinding}"/>
                    </DataTemplate>
                </xcdg:Column.CellContentTemplate>
            </xcdg:Column>
        </xcdg:DataGridControl.Columns>
    </xcdg:DataGridControl>
</Grid>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40372765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档