C# WPF toolkit: Comment puis-je faire une cellule à partir d'une grille de données modifiables?

Prendre note du code pour cette petite WPF C# programme fait avec Microsoft Visual Studio 2008:

.xaml

<Window x:Class="WpfDatagridTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WpfToolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <WpfToolkit:DataGrid 
        x:Name="DataGrid_" ItemsSource="{Binding}"
        SelectionMode="Extended"
        CanUserAddRows="False" CanUserDeleteRows="False"
        CanUserResizeRows="False" CanUserSortColumns="False"
        AutoGenerateColumns="False"
        RowHeaderWidth="17" RowHeight="25" />
    </Grid>
</Window>

.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Windows.Controls;
namespace WpfDatagridTest
{
///<summary>
///Interaction logic for Window1.xaml
///</summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
const int MAX = 10;
for(int i = 0; i < MAX; ++i)
DataGrid_.Columns.Add(new DataGridTextColumn()
{
Header = i
});
DataGrid_.Items.Add("");
}
}
}

Ce programme montre, tout simplement, un WPF toolkit datagrid avec 10 colonnes avec en-têtes et une ligne vide.

Il y a un problème qui se produit lorsqu'une cellule de la ligne vide est sélectionné et clique ensuite être édité: le programme se bloque. Une boîte de message s'affiche dans Visual Studio en disant ceci: "Il n'y a pas de code source disponible pour l'emplacement actuel." Je voudrais savoir comment puis-je faire une cellule à partir d'une grille de données modifiables?


Ici est l'exception et stacktrace:

Système.InvalidOperationException a été
non gérée Message="'EditItem" n'est pas
permis de ce point de vue."
Source="PresentationFramework"
StackTrace:
au Système.De Windows.Les contrôles.ItemCollection.Système.ComponentModel.IEditableCollectionView.EditItem(Objet
l'élément)
chez Microsoft.De Windows.Les contrôles.DataGrid.EditRowItem(Objet
rowItem)
C:\jj\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\DataGrid\Microsoft\Windows\Controls\DataGrid.cs:ligne
3396
chez Microsoft.De Windows.Les contrôles.DataGrid.OnExecutedBeginEdit(ExecutedRoutedEventArgs
e) dans
C:\jj\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\DataGrid\Microsoft\Windows\Controls\DataGrid.cs:ligne
2208
chez Microsoft.De Windows.Les contrôles.DataGrid.OnExecutedBeginEdit(Objet
l'expéditeur, ExecutedRoutedEventArgs e) dans
C:\jj\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\DataGrid\Microsoft\Windows\Controls\DataGrid.cs:ligne
2036
au Système.De Windows.D'entrée.CommandBinding.OnExecuted(Objet
l'expéditeur, ExecutedRoutedEventArgs e)
au Système.De Windows.D'entrée.Le gestionnaire de commandes.ExecuteCommandBinding(Objet
l'expéditeur, ExecutedRoutedEventArgs e,
CommandBinding commandBinding)
au Système.De Windows.D'entrée.Le gestionnaire de commandes.FindCommandBinding(CommandBindingCollection
commandBindings, Object sender,
RoutedEventArgs e, ICommand de commande,
Boolean execute)
au Système.De Windows.D'entrée.Le gestionnaire de commandes.FindCommandBinding(Objet
sender, RoutedEventArgs e, ICommand
commande, Boolean execute)
au Système.De Windows.D'entrée.Le gestionnaire de commandes.OnExecuted(Objet
l'expéditeur, ExecutedRoutedEventArgs e)
au Système.De Windows.UIElement.OnExecutedThunk(Objet
l'expéditeur, ExecutedRoutedEventArgs e)
au Système.De Windows.D'entrée.ExecutedRoutedEventArgs.InvokeEventHandler(Délégué
genericHandler, Objet cible)
au Système.De Windows.RoutedEventArgs.InvokeHandler(Délégué
gestionnaire d'Objet cible)
au Système.De Windows.RoutedEventHandlerInfo.InvokeHandler(Objet
cible, RoutedEventArgs
routedEventArgs)
au Système.De Windows.EventRoute.InvokeHandlersImpl(Objet
source, RoutedEventArgs args, Boolean
surrelance)
au Système.De Windows.UIElement.RaiseEventImpl(DependencyObject
sender, RoutedEventArgs args)
au Système.De Windows.UIElement.RaiseEvent(RoutedEventArgs
args, Boolean confiance)
au Système.De Windows.D'entrée.RoutedCommand.ExecuteImpl(Objet
paramètre, IInputElement cible,
Boolean userInitiated)
au Système.De Windows.D'entrée.RoutedCommand.Execute(Objet
paramètre, IInputElement cible)
chez Microsoft.De Windows.Les contrôles.DataGrid.BeginEdit(RoutedEventArgs
editingEventArgs)
C:\jj\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\DataGrid\Microsoft\Windows\Controls\DataGrid.cs:ligne
3059
chez Microsoft.De Windows.Les contrôles.DataGridCell.OnAnyMouseLeftButtonDown(MouseButtonEventArgs
e) dans
C:\jj\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\DataGrid\Microsoft\Windows\Controls\DataGridCell.cs:ligne
748
chez Microsoft.De Windows.Les contrôles.DataGridCell.OnAnyMouseLeftButtonDownThunk(Objet
l'expéditeur, MouseButtonEventArgs e) dans
C:\jj\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\DataGrid\Microsoft\Windows\Controls\DataGridCell.cs:ligne
726
au Système.De Windows.D'entrée.MouseButtonEventArgs.InvokeEventHandler(Délégué
genericHandler, Objet genericTarget)
au Système.De Windows.RoutedEventArgs.InvokeHandler(Délégué
gestionnaire d'Objet cible)
au Système.De Windows.RoutedEventHandlerInfo.InvokeHandler(Objet
cible, RoutedEventArgs
routedEventArgs)
au Système.De Windows.EventRoute.InvokeHandlersImpl(Objet
source, RoutedEventArgs args, Boolean
surrelance)
au Système.De Windows.UIElement.ReRaiseEventAs(DependencyObject
sender, RoutedEventArgs args,
RoutedEvent newEvent)
au Système.De Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(DependencyObject
l'expéditeur, MouseButtonEventArgs e)
au Système.De Windows.UIElement.OnMouseDownThunk(Objet
l'expéditeur, MouseButtonEventArgs e)
au Système.De Windows.D'entrée.MouseButtonEventArgs.InvokeEventHandler(Délégué
genericHandler, Objet genericTarget)
au Système.De Windows.RoutedEventArgs.InvokeHandler(Délégué
gestionnaire d'Objet cible)
au Système.De Windows.RoutedEventHandlerInfo.InvokeHandler(Objet
cible, RoutedEventArgs
routedEventArgs)
au Système.De Windows.EventRoute.InvokeHandlersImpl(Objet
source, RoutedEventArgs args, Boolean
surrelance)
au Système.De Windows.UIElement.RaiseEventImpl(DependencyObject
sender, RoutedEventArgs args)
au Système.De Windows.UIElement.RaiseEvent(RoutedEventArgs
args, Boolean confiance)
au Système.De Windows.D'entrée.InputManager.ProcessStagingArea()
au Système.De Windows.D'entrée.InputManager.ProcessInput(InputEventArgs
d'entrée)
au Système.De Windows.D'entrée.InputProviderSite.ReportInput(InputReport
inputReport)
au Système.De Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr
hwnd, InputMode mode, Int32 horodatage,
RawMouseActions actions, Int32 x,
Int32 y, Int32 roue)
au Système.De Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr
hwnd, Int32 msg, IntPtr wParam, IntPtr
lParam, Boolean& manipuler)
au Système.De Windows.Interop.HwndSource.InputFilterMessage(IntPtr
hwnd, Int32 msg, IntPtr wParam, IntPtr
lParam, Boolean& manipuler)
au MME Win32.HwndWrapper.WndProc(IntPtr
hwnd, Int32 msg, IntPtr wParam, IntPtr
lParam, Boolean& manipuler)
au MME Win32.HwndSubclass.DispatcherCallbackOperation(Objet
o)
au Système.De Windows.Le filetage.ExceptionWrapper.InternalRealCall(Délégué
rappel, Objet args, Boolean
isSingleParameter)
au Système.De Windows.Le filetage.ExceptionWrapper.TryCatchWhen(Objet
source, Délégué de rappel, Objet
args, Boolean isSingleParameter,
Délégué catchHandler)
au Système.De Windows.Le filetage.Répartiteur.WrappedInvoke(Délégué
rappel, Objet args, Boolean
isSingleParameter, Délégué
catchHandler)
au Système.De Windows.Le filetage.Répartiteur.InvokeImpl(DispatcherPriority
de priorité, le Délai de timeout, Délégué
méthode, l'Objet args, Boolean
isSingleParameter)
au Système.De Windows.Le filetage.Répartiteur.Invoke(DispatcherPriority
en priorité, le Délégué de la méthode, Object arg)
au MME Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr
lParam)
au MME Win32.UnsafeNativeMethods.DispatchMessage(MSG&
msg)
au Système.De Windows.Le filetage.Répartiteur.PushFrameImpl(DispatcherFrame
image)
au Système.De Windows.Le filetage.Répartiteur.PushFrame(DispatcherFrame
image)
au Système.De Windows.Le filetage.Répartiteur.Run()
au Système.De Windows.Application.RunDispatcher(Objet
ignorer)
au Système.De Windows.Application.RunInternal(Fenêtre
de la fenêtre)
au Système.De Windows.Application.Exécuter(Fenêtre
de la fenêtre)
au Système.De Windows.Application.Run()
au WpfDatagridTest.App.Main() dans
C:\Users\Frank\Documents\Visual_Studio_2008\Projects\WpfDatagridTest\WpfDatagridTest\obj\Debug\App.g.cs:ligne
0
au Système.Domaine d'application._nExecuteAssembly(Assemblée
l'assemblée, String[] args)
au Système.Domaine d'application.ExecuteAssembly(String
assemblyFile, la Preuve
assemblySecurity, String[] args)
chez Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
au Système.Le filetage.ThreadHelper.ThreadStart_Context(Objet
de l'état)
au Système.Le filetage.ExecutionContext.Exécuter(ExecutionContext
executionContext, ContextCallback
rappel, l'état de l'Objet)
au Système.Le filetage.ThreadHelper.ThreadStart()
InnerException:

1.3 k vues et pas de upvote lol 😀

OriginalL'auteur Partial | 2009-08-04