Créer DataGridTemplateColumn via le code C #
J'ai une dynamique de grille de données que j'ai créé. Je suis de la création de chaque colonne par le code derrière. Je vais avoir des ennuis sur une colonne que je veux être affichée à un textblock lorsqu'il n'est pas l'édition, mais comme une zone de liste déroulante lors de l'édition. J'ai une ObservableCollection de Transactions. Chaque Transaction a un type appelé "Compte". Voici ce que j'ai à ce jour:
private DataGridTemplateColumn GetAccountColumn()
{
//Create The Column
DataGridTemplateColumn accountColumn = new DataGridTemplateColumn();
accountColumn.Header = "Account";
Binding bind = new Binding("Account");
bind.Mode = BindingMode.TwoWay;
//Create the TextBlock
FrameworkElementFactory textFactory = new FrameworkElementFactory(typeof(TextBlock));
textFactory.SetBinding(TextBlock.TextProperty, bind);
DataTemplate textTemplate = new DataTemplate();
textTemplate.VisualTree = textFactory;
//Create the ComboBox
bind.Mode = BindingMode.OneWay;
FrameworkElementFactory comboFactory = new FrameworkElementFactory(typeof(ComboBox));
comboFactory.SetValue(ComboBox.DataContextProperty, this.Transactions);
comboFactory.SetValue(ComboBox.IsTextSearchEnabledProperty, true);
comboFactory.SetBinding(ComboBox.ItemsSourceProperty, bind);
DataTemplate comboTemplate = new DataTemplate();
comboTemplate.VisualTree = comboFactory;
//Set the Templates to the Column
accountColumn.CellTemplate = textTemplate;
accountColumn.CellEditingTemplate = comboTemplate;
return accountColumn;
}
La valeur s'affiche dans le TextBlock. Toutefois, dans la zone de liste déroulante, je ne suis que l'obtention d'un caractère à afficher sur chaque élément. Pour exemple, voici le textblock:
Mais quand je clique sur modifier et aller dans la zone de liste déroulante, voici ce qui est indiqué:
Quelqu'un peut m'aider, afin que les éléments dans la zone de liste déroulante s'affichent correctement? Aussi, lorsque je sélectionne quelque chose à partir de la zone de liste déroulante, le textblock n'est pas mis à jour avec l'article que j'ai sélectionné.
Mise à JOUR:
Voici ma colonne à partir de maintenant. Les éléments dans la zone de liste déroulante sont affichés correctement. Le problème maintenant est que lorsqu'un nouvel élément est sélectionné, le texte dans le TextBlock n'est pas mis à jour avec le nouvel élément.
private DataGridTemplateColumn GetAccountColumn()
{
//Create The Column
DataGridTemplateColumn accountColumn = new DataGridTemplateColumn();
accountColumn.Header = "Account";
Binding bind = new Binding("Account");
bind.Mode = BindingMode.OneWay;
//Create the TextBlock
FrameworkElementFactory textFactory = new FrameworkElementFactory(typeof(TextBlock));
textFactory.SetBinding(TextBlock.TextProperty, bind);
DataTemplate textTemplate = new DataTemplate();
textTemplate.VisualTree = textFactory;
//Create the ComboBox
Binding comboBind = new Binding("Account");
comboBind.Mode = BindingMode.OneWay;
FrameworkElementFactory comboFactory = new FrameworkElementFactory(typeof(ComboBox));
comboFactory.SetValue(ComboBox.IsTextSearchEnabledProperty, true);
comboFactory.SetValue(ComboBox.ItemsSourceProperty, this.Accounts);
comboFactory.SetBinding(ComboBox.SelectedItemProperty, comboBind);
DataTemplate comboTemplate = new DataTemplate();
comboTemplate.VisualTree = comboFactory;
//Set the Templates to the Column
accountColumn.CellTemplate = textTemplate;
accountColumn.CellEditingTemplate = comboTemplate;
return accountColumn;
}
Les "Comptes" de la propriété est déclarée comme telle dans ma classe MainWindow:
public ObservableCollection<string> Accounts { get; set; }
public MainWindow()
{
this.Types = new ObservableCollection<string>();
this.Parents = new ObservableCollection<string>();
this.Transactions = new ObservableCollection<Transaction>();
this.Accounts = new ObservableCollection<string>();
OpenDatabase();
InitializeComponent();
}
Voici ma Catégorie de Transactions:
public class Transaction
{
private string date;
private string number;
private string account;
public string Date
{
get { return date; }
set { date = value; }
}
public string Number
{
get { return number; }
set { number = value; }
}
public string Account
{
get { return account; }
set { account = value; }
}
}
source d'informationauteur Eric R.
Vous devez vous connecter pour publier un commentaire.
Vous lier la
ItemsSource
à la valeur sélectionnée, une chaîne de caractères, alias char tableau, de sorte que chaque caractère est utilisé comme un élément, leItemsSource
de liaison, vraisemblablement, devrait cibler certains autres de la collection dont la valeur peut être choisie.Par la création de la Liaison, vous pouvez définir SelectedValue dans un datagrid pour WPF.