Foreach treeview-item j'ai une propre grille de données. Treeview-items et dataagrids sont remplis par liaison.Comment obtenir l'objet SelectedItem de plusieurs datagrids?
Dans les zones de texte, j'ai une liaison à l'élément sélectionné des DataGrid. Mais la liaison sur ces zones de texte ne fonctionne qu'avec le premier DataGrid. Toutes les autres DataGrid ne transfère pas le SelectedItem aux champs de saisie:
Voici le treeview avec le DataGrid:
<TreeView ItemsSource="{Binding Path=PlaceList}">
<TreeView.ItemTemplate>
<DataTemplate>
<TreeViewItem Header="{Binding Path=Name}">
<DataGrid ItemsSource="{Binding MachinesInPlace, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectionUnit="FullRow"
SelectedItem="{Binding SelectedMachine, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="True"
IsSynchronizedWithCurrentItem="True"
SelectionMode="Single">
</DataGrid>
</TreeViewItem>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Voici la zone de texte:
<TextBox Text="{Binding PlaceList/SelectedMachine.Name, ValidatesOnDataErrors=True}" />
I travaille avec MvvmLight. Mon ViewModel détient le PlaceList:
public ObservableCollection<PlaceModel> PlaceList { get; set; } = new ObservableCollection<PlaceModel>();
public ObjectInspectorViewModel()
{
PlaceList = PlaceModel.GetPlaces(BaseResourcePaths.PlacesCsv);
}
C'est mon lieu-modèle:
public class PlaceModel
{
public int Id { get; set; }
public string Name { get; set; } = "_CurrentObjectName";
public string Length { get; set; }
public string Width { get; set; }
public string Height { get; set; }
public ObservableCollection<MachineModel> MachinesInPlace { get; set; }
public MachineModel SelectedMachine { get; set; }
public static ObservableCollection<PlaceModel> GetPlaces(string filepath)
{
[...]
}
}
j'ai essayé quelque chose, mais enfin je ne sais pas comment résoudre le bogue. Quel est le problème? Ma suggestion est la propriété '' SelectedMachine '' dans le lieu-modèle ...
Voici un exemple de projet (avec la solution supplémentaire de Sebastian Richter). Il montre les problèmes: https://www.file-upload.net/download-12370581/DatagridTreeViewError.zip.html
N'avez-vous pas besoin d'un objet SelectedItem sur l'arborescence, puis faites vos liaisons dans les zones de texte basées sur cela?Sinon, les liaisons ne font que saisir la première instance et ne sont pas mises à jour lors de la sélection d'une arborescence. – Josh
Merci pour votre réponse. J'ai essayé votre solution mais cela n'a pas fonctionné. J'ai dû étendre le contrôle treeview avec la propriété SelectedItem comme sur http://stackoverflow.com/a/3535089. Je me suis retrouvé avec le XAML suivant: http://pastebin.com/VVgBtCqR Le problème est que l'arborescence contient une liste pleine de place et dans chaque endroit est une liste différente (datagrid) des machines. Donc, sur treeview-select, je pourrais obtenir quelle place-liste est sélectionnée mais je ne pouvais pas obtenir quelle machine à l'intérieur de ces place-listes est sélectionné. Ou ai-je tort? – Chpo7234