我有一個「CanUserAddRows = False」的數據網格,我想在按鈕單擊時添加一個新行並開始編輯它。這裏是XAML:選擇並編輯新添加的行中的第一個DataGrid單元格
<Window x:Class="TestDataGrid2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestDataGrid2"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button Content="Add Item" HorizontalAlignment="Left" Click="Button_Click"/>
<DataGrid ItemsSource="{Binding Items}" Grid.Row="1" Name="MyGrid" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Value" Binding="{Binding Value}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
這裏是後面的代碼:
using System.Windows;
using System.Windows.Controls;
namespace TestDataGrid2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var mainViewModel = DataContext as MainViewModel;
if (mainViewModel != null)
mainViewModel.AddItem();
var grid = MyGrid;
var cell = new DataGridCellInfo(grid.Items[grid.Items.Count - 1], grid.Columns[0]);
grid.CurrentCell = cell;
grid.BeginEdit();
}
}
}
這是我的視圖模型:
using System.Collections.ObjectModel;
namespace TestDataGrid2
{
public class MainViewModel
{
public ObservableCollection<Item> Items { get; set; } = new ObservableCollection<Item>();
public void AddItem()
{
Items.Add(new Item { Value = "New Item" });
}
}
public class Item
{
public string Value { get; set; }
}
}
出於某種原因,我無法啓動編輯單元格在新添加的行中。我懷疑這可能是因爲在我稱之爲BeginEdit的時刻,視覺元素還不存在。有沒有辦法強制單元格加載以便能夠進行對焦和編輯?或者當細胞準備就緒時,我是否可以訂閱一個事件?
100+更好地找到比所有其他解決方案 – SAT
SelectionUnit = 「細胞」, SelectionMode =「Single」,我刪除了上面的AddItem代碼 - 在新的(尚未提交的)DataGrid行內聚焦 – TerrorBight