我发现了一些类似的问题,但没有一个能完全解决我的问题,所以我把一个小例子放在一起。
我希望能够按下D键,并从ObservableCollection中删除该项目。这可以按预期工作。
然后我希望能够继续使用箭头键和我刚刚删除的行之后的行中的D键来操作数据网格(即更新的数据网格的索引等于已删除项目的索引)。
我找到的最有用的答案就是这个 - Focus on DataGridCell for SelectedItem when DataGrid Receives Keyboard Focus - 但我不确定何时应该调用它,因为我想在视图更新后调用它,我目前正在使用SelectionChanged事件,但显然这种情况经常被使用。
我们非常感谢任何建议,我希望我在下面提供了足够的代码,让任何人都可以重新创建项目并复制问题。
非常感谢, 麦克
我的XAML代码:
<Window x:Class="DataGridProblem.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid ItemsSource="{Binding MyItems}"
SelectedItem="{Binding SelectedItem}">
<DataGrid.InputBindings>
<KeyBinding Key="D" Command="{Binding Delete}"/>
</DataGrid.InputBindings>
</DataGrid>
</Grid>
</Window>
我的观点模型:
namespace DataGridProblem
{
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private ObservableCollection<MyItem> _myItems;
private ICommand _delete;
public MyItem SelectedItem { get; set; }
public ICommand Delete { get { return _delete; } }
public ObservableCollection<MyItem> MyItems
{
get { return _myItems; }
set
{
_myItems = value;
OnPropertyChanged("MyItems");
}
}
public ViewModel()
{
_myItems = new ObservableCollection<MyItem>();
_myItems.Add(new MyItem() { name = "John" });
_myItems.Add(new MyItem() { name = "Mike" });
_myItems.Add(new MyItem() { name = "Phil" });
_delete = new RelayCommand(DeleteSelected);
}
private void DeleteSelected(object obj)
{
MyItems.Remove(SelectedItem);
}
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
MyItem:
namespace DataGridProblem
{
public class MyItem
{
public string name { get; set; }
}
}
答案 0 :(得分:0)
我会尝试这样的事情:
string line;
line = fileIN.readline();
int start = line.find_last_of('='); //index of last instance of char
//you need to start one behind the last index
//and end one index before the size
line = line.substr( (start + 1), (line.size() - 1) );