J'ai DataGrid lié à un ObservableCollection <> dans son ViewModel:dans WPF-Preselection DataGrid avec MVVM
<DataGrid ItemsSource="{Binding Path=Data}" SelectedItem="{Binding Path=CurrentItem}" />
ViewModel:
public ObservableCollection<TestModel> Data { get; set; }
private TestModel _currentItem;
public TestModel CurrentItem
{
get { return _currentItem; }
set
{
_currentItem = value;
RaisePropertyChanged("CurrentItem");
}
}
Maintenant ce que je veux est que le DataGrid présélectionnera la première ligne à droite au démarrage du formulaire. Donc, je mets ce qui suit dans mon test de code dans le constructeur:
Data = new ObservableCollection<TestModel>
{
new TestModel() { Property1 = Guid.NewGuid().ToString() },
new TestModel() { Property1 = Guid.NewGuid().ToString() },
new TestModel() { Property1 = Guid.NewGuid().ToString() }
};
CurrentItem = Data[0];
Les données sont affichées, mais la première ligne n'est pas sélectionnée par la grille. Même si je mets la liaison à TwoWay, ça ne marchera pas.
Si je supprime le SelectedItem contraignant en XAML et ajouter ce qui suit dans le code-behind, il fonctionne bien:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var m = this.DataContext as MainViewModel;
grid.SelectedItem = m.CurrentItem;
}
Pouvez-vous essayer si la sélection d'une ligne dans DataGrid met à jour la propriété CurrentItem de votre modèle de vue? – Amit
@Amit Si vous voulez savoir, si le CurrentItem-setter est appelé lorsque je clique sur une ligne dans la grille alors la réponse est oui, c'est. Même si je laisse le réglage pour la direction de liaison. – sprinter252
J'ai remarqué le même problème et j'ai fini par utiliser la même solution de contournement. – RQDQ