[英]Xceed datagrid showing combobox
我想使用“ Xceed DataGrid for WPF”社區版來顯示WPF應用程序中已經對Propertygrid正確的項目。
文本框(名字)工作正常,但組合框不工作。 問題是combobox沒有填充任何內容,並且沒有正確設置性別。 我的簡單代碼如下。
XAML:
<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是:
InitializeComponent();
this.DataContext = new MainWindowViewModel();
數據類為:
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; }
}
視圖模型是:
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));
}
}
似乎Window
沒有屬性SelectedEntity
。 ;-)您想要綁定到的是DataContext.SelectedEntity.Gender
。 無論如何,這根本不起作用,因為您嘗試將單個值(性別)綁定為ItemsSource
。
您需要向組合框提供(枚舉)值的列表。 如何在WPF中將枚舉綁定到組合框控件?
編輯
由於我的答案顯然不夠具體,因此我提供了一個完整的示例:
XAML:
<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:
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:
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;
}
我從如何在XCeed DataGridControl(WPF)中添加ComboBox列中得到了一個類似的示例
如果有人遇到相同的問題,只需發布我的代碼即可。
ViewModel:
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);
}
}
背后的代碼:
InitializeComponent();
viewModel = new ViewModel();
this.DataContext = viewModel;
XMAL:
<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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.