Смежный вопрос: Ошибка проверки WPG DataGrid?
У вас есть следующая DataGrid
<DataGrid ItemsSource="{Binding .}" AutoGenerateColumns="False" x:Name="dg">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name, ValidatesOnDataErrors=True}" Header="Name" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding ChangeNameCommand}">...</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
- Введите некоторые недействительные данные
- Нажмите на кнопку, которая будет делать что-то вроде Name = "Something";(Да, OnPropertyChanged запущен).Результат: DataGrid показывает новое значение, но все еще красный восклицательный знак.
- Выберите другой элемент в сетке.Результат: предыдущий выбранный элемент снова содержит неверные данные!
Кажется, это ошибка.Но что я могу сделать, чтобы изменить базовую ViewModel (например, если я использую OpenFileDialog)
ViewModel:
public class ItemViewModel : INotifyPropertyChanged, IDataErrorInfo
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public string Error
{
get { return string.Empty; }
}
public string this[string columnName]
{
get
{
if (_name == "Error")
return "Name is Error";
return string.Empty;
}
}
public ICommand ChangeNameCommand { get; protected set; }
public ItemViewModel()
{
ChangeNameCommand = new RelayCommand(() => { Name = "Another Name"; });
}
}
DataContext установлен в ObservableCollection ItemViewModel