我得的DataGrid绑定到其视图模型一个ObservableCollection <>:预选在WPF的DataGrid中与MVVM
<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");
}
}
现在我想的是,该数据网格将在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结合,并添加以下代码隐藏,它工作得很好:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var m = this.DataContext as MainViewModel;
grid.SelectedItem = m.CurrentItem;
}
你可以尝试如果选择DataGrid中的一行更新您的视图模型的CurrentItem属性? – Amit
@Amit如果你想知道,如果当我点击网格中的一行时调用CurrentItem-setter,那么答案是肯定的,它是。即使我忽略了绑定方向的设置。 – sprinter252
我注意到同样的问题,并最终使用相同的解决方法。 – RQDQ