尝试以编程方式在Item
中选择一些DataGrid
时遇到麻烦。不使用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
已选择并正确突出显示。但是,当我尝试通过
Item
属性选择并突出显示Model
时,Item
未突出显示!SelectedItem = (GridItem)selItem; // Bad
是什么原因?任何的想法?
最佳答案
您需要从INotifyPropertyChanged
继承窗口或任何 View 模型类,否则它不会通知客户端属性值已更改。
对于你的情况可能就像
public partial class Window1 : INotifyPropertyChanged
{
// Class code goes here;
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(String propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
关于wpf - 以编程方式选择并突出显示数据网格MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358695/