私はをObservableCollection
にバインドしているため、ユーザーは行を追加/削除できます。最初の列で、ユーザーがセルをダブルクリックすると、新しいウィンドウが表示されますが、セルから出て再入力するまでは表示されません。 デバッグ後、DataGridTextColumn
が2回目のダブルクリックまで初期化されないという問題が見つかりました。 私のバインディングに間違いはありますか?新しいrowAddをObservableCollectionアイテムにバインドする方法
XAML:
<Window.Resources>
<Style TargetType="DataGridCell">
<EventSetter Event="MouseDoubleClick" Handler="CellDoubleClick"/>
</Style>
</Window.Resources>
<DataGrid x:Name="TeachersDataGrid" ItemsSource="{Binding TeacherInfoList, IsAsync=True}" FlowDirection="RightToLeft" Canvas.Left="104" Canvas.Top="18" AutoGenerateColumns="False" CanUserAddRows="True" CanUserDeleteRows="True" Background="#FFEEECEC">
<DataGrid.Columns>
<DataGridTextColumn Header="الرقم" Binding="{Binding Path=Num, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="لقب الموظف و إسمه" IsReadOnly="True" Binding="{Binding Path=FullName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="مهنته" IsReadOnly="True" Binding="{Binding Path=CurrentStatus, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="المؤسسة أو مكان العمل" IsReadOnly="True" Binding="{Binding Path=SchoolName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="الولاية" IsReadOnly="True" Binding="{Binding Path=Province, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="طبيعة التفتيش" Binding="{Binding Path=Notes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>
のC#:
private void CellDoubleClick(object sender, RoutedEventArgs e)
{
DataGridCell cell = null;
TextBox textBox = null;
cell = sender as DataGridCell;
if (cell == null)
//if (cell == null || (cell.Column.DisplayIndex == 0 || cell.Column.DisplayIndex == 5))
{
return;
}
MessageBox.Show("cell66");
DataGridRow row = DataGridRow.GetRowContainingElement(cell);
int rowIndex = row.GetIndex();
//MessageBox.Show(rowIndex.ToString());
textBox = cell.Content as TextBox;
if (textBox == null)
{
return;
}
MessageBox.Show("textBox");
try
{
TeachersListWindow TeachersListW = new TeachersListWindow(this, rowIndex);
TeachersListW.Show();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
シンプルなスニペットコードは素晴らしいでしょう。 –