【发布时间】:2023-03-21 13:01:01
【问题描述】:
我已将 DataGrid 绑定到其 ViewModel 中的 ObservableCollection:
<DataGrid ItemsSource="{Binding Path=Data}" SelectedItem="{Binding Path=CurrentItem}" />
视图模型:
public ObservableCollection<TestModel> Data { get; set; }
private TestModel _currentItem;
public TestModel CurrentItem
{
get { return _currentItem; }
set
{
_currentItem = value;
RaisePropertyChanged("CurrentItem");
}
}
现在我想要的是,DataGrid 将在 Form-startup 上预选第一行。因此,我将以下内容放入构造函数中的测试代码中:
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];
显示数据,但网格未选择第一行。即使我将绑定设置为 TwoWay,它也不起作用。
如果我删除 XAML 中的 SelectedItem-binding 并在 Code-behind 中添加以下内容,则效果很好:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var m = this.DataContext as MainViewModel;
grid.SelectedItem = m.CurrentItem;
}
【问题讨论】:
-
如果在 DataGrid 中选择一行更新您的视图模型的 CurrentItem 属性,您可以试试吗?
-
@Amit 如果您想知道,如果当我单击网格中的一行时调用 CurrentItem-setter,那么答案是肯定的。即使我省略了绑定方向的设置。
-
我注意到了同样的问题并最终使用了相同的解决方法。
-
@RQDQ 谢谢。我现在有点魅力了;-)
-
如何/在哪里将 MainViewModel 设置为 DataContext?因为我已经根据您的代码创建了一个小型重现,并且预选工作正常。
标签: c# wpf mvvm mvvm-light