【发布时间】:2014-06-15 00:55:52
【问题描述】:
当我尝试以编程方式在 DataGrid 中选择一些 Item 时遇到问题。不使用MVVM 模式一切正常。看看 XAML:
<DataGrid
Name="_dataGrid"
AutoGenerateColumns="False"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"/>
<DataGridTextColumn Binding="{Binding SecondName}"/>
</DataGrid.Columns>
</DataGrid>
后面的代码:
public class GridItem
{
public String Name { get; set; }
public String SecondName { get; set; }
}
public partial class Window1 : Window
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(String propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private GridItem _selectedItem;
public GridItem SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
RaisePropertyChanged("SelectedItem");
}
}
public Window1()
{
InitializeComponent();
DataContext = this;
_dataGrid.Loaded += DataGridLoaded;
Init1();
}
void DataGridLoaded(object sender, RoutedEventArgs e)
{
Int32 rowIndex = 2;
var selItem = _dataGrid.Items[rowIndex];
SelectedItem = (GridItem)selItem; <-------- Bad
//_dataGrid.SelectedItem = selItem; <-------- Good
}
private void Init1()
{
var source = new List<GridItem>();
source.Add(new GridItem
{
Name = "pavlik",
SecondName = "bobr"
});
source.Add(new GridItem
{
Name = "alex",
SecondName = "ugr"
});
source.Add(new GridItem
{
Name = "den",
SecondName = "ivanov"
});
source.Add(new GridItem
{
Name = "dima",
SecondName = "klim"
});
_dataGrid.ItemsSource = source;
}
}
所以,当我像这样选择Item 时
_dataGrid.SelectedItem = selItem; // Good
Item 被正确选择并突出显示。
但是当我尝试通过Model 属性选择并突出显示Item 时,Item 没有突出显示!
SelectedItem = (GridItem)selItem; // Bad
是什么原因?有什么想法吗?
【问题讨论】:
标签: wpf mvvm datagrid highlight selecteditem