XAML Designer Entwurfsansicht zeigtDer Wert darf nicht null sein. Parametername: Taste (geschieht nur auf XAML Designer Design-Ansicht)
Eine Ausnahme
Argument geworfen wurde: Der Wert darf nicht null sein.
Parametername: Schlüssel
Stacktrace (siehe nach Foto)
Innerexception: Keine
ich für ein paar Tage auf dem folgenden Problem haben zu kämpfen, die mich daran hindert, unter Verwendung XAML Designe r Entwurfsansicht auf jeder betroffenen Ansicht.
Gestern gelang es mich schließlich dieses seltsame Verhalten zu isolieren, die es besonders schwer zu verfolgen, da sie nur zur Entwurfszeit geschieht, und das scheint eine conflit zwischen generischer Art und Datagrid ‚s Itemssource-Eigenschaft (System.Windows .Steuerelemente).
Also, das ist, was auf der Entwurfsansicht gezeigt wird
bei System.Collections.Generic.Dictionary
2.FindEntry(TKey key) at System.Collections.Generic.Dictionary
2.TryGetValue (TKey Schlüssel, TValue & Wert) bei System.Windows.Controls.DataGridItemAttachedStorage.TryGetValue (Objekt Element, Eigenschaft DependencyProperty, Objekt & Wert) um System.Windows.Cont rols.DataGridRow.RestoreAttachedItemValue (DependencyObject objectWithProperty, DependencyProperty Eigenschaft) bei System.Windows.Controls.DataGridRow.SyncProperties (Boolean forcePrepareCells) bei System.Windows.Controls.DataGridRow.PrepareRow (Object Artikel, DataGrid- owningDataGrid) bei System.Windows.Controls.DataGrid.PrepareContainerForItemOverride (DependencyObject Element, Objektposition) bei System.Windows.Controls.ItemsControl.MS.Internal.Controls.IGeneratorHost.PrepareItemContainer (DependencyObject Behälter, Objektposition) bei System.Windows. Controls.ItemContainerGenerator.System.Windows.Controls.Primitives.IItemContainerGenerator.PrepareItemContainer (DependencyObject Container) bei System.Windows.Controls.VirtualizingStackPanel.InsertContainer (Int32 child, UIElement Behälter, Boolean isRecycled) bei System.Windows.Controls.VirtualizingStackPanel.AddContainerFromGenerator (Int32 child, UIElement Kind, Boolean newlyRealized, Boolean isBeforeViewport) um System.Windows.Controls.VirtualizingStackPanel.MeasureChild (IItemContainerGenerator & Generator, IContainItemStorage & itemStorageProvider, IContainItemStorage & parentItemStorageProvider, & parentItem Objekt, Boolean & hasUniformOrAverageContainerSizeBeenSet, Doppel & computedUniformOrAverageContainerSize, Doppel & computedUniformOrAverageContainerPixelSize, Boolean & computedAreContainersUniformlySized, IList & Artikel, Objekt & Artikel, IList & Kinder, Int32 & child, Boolean & visualOrderChanged, Boolean & isHorizontal, Größe & childConstraint, Rect & Ansichtsfenster VirtualizationCacheLength & cachesize, VirtualizationCacheLengthUnit & cacheUnit, Boolean & foundFirstItemInViewport, Double & firstItemInViewportOffset, Größe & stackPixelSize, Größe & stackPixelSizeInViewport, Größe & stackPixelSizeInCacheBeforeViewport, Größe & StapelPixelSizeInCacheAfterViewport, Größe & stackLogicalSize, Größe & stackLogicalSizeInViewport, Größe & stackLogicalSizeInCacheBeforeViewport, Größe & stackLogicalSizeInCacheAfterViewport, Boolean & mustDisableVirtualization, Boolean isBeforeFirstItem, Boolean isAfterFirstItem, Boolean isAfterLastItem, Boolean skipActualMeasure, Boolean skipGeneration, Boolean & hasBringIntoViewContainerBeenMeasured, Boolean & hasVirtualizingChildren) unter System.Windows.Controls.VirtualizingStackPanel.MeasureOverrideImpl (Größe const Raint, Nullable previouslyMeasuredOffsets, Nullable`1 & lastPagePixelSize, Boolean Aufm) bei System.Windows.Controls.VirtualizingStackPanel.MeasureOverride (Size constraint) bei System.Windows.Controls.Primitives.DataGridRowsPresenter.MeasureOverride (Size constraint) bei System.Windows.FrameworkElement.MeasureCore (Size availableSize) bei System.Windows.UIElement.Measure (Size availableSize) bei System.Windows.ContextLayoutManager.UpdateLayout() bei System.Windows.UIElement.UpdateLayout ()
MyViewModelbase.cs (dies ist meine allgemeine Ansicht Modellbasis)
namespace BugProof.ViewModels
{
using System.Collections.Generic;
public class MyViewModelBase<TItem> where TItem : class
{
public List<TItem> Items { get; set; }
public MyViewModelBase() { }
}
}
MyExtendedViewModel.cs (das ist meine erweiterte Ansicht Modell, das auf einem String Typ basieren wird)
namespace BugProof.ViewModels
{
public class MyExtendedViewModel : MyViewModelBase<string>
{
public MyExtendedViewModel()
{
}
}
}
MainWindow.xaml
<Window x:Class="BugProof.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:BugProof.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:BugProof"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance {x:Type vm:MyExtendedViewModel}, IsDesignTimeCreatable=False}"
Title="MainWindow" Height="350" Width="525">
<StackPanel>
<TextBlock>This is what you should se in the designer</TextBlock>
<!--Try replacing following DataGrid by a ListBox or ListView-->
<DataGrid ItemsSource="{Binding Items}"/>
</StackPanel>
</Window>
MainWindow.xaml.cs (Mainwindow Code hinter)
using System.Windows;
namespace BugProof
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}
Komplement Berich Details:
- Das Verhalten tritt nicht auf, wenn man Datagrid Steuerung durch einen Listbox ersetzt Listview oder Items
- Ich verwende Visual Studio 2015, Version 14.0.25431.01-Update 3
- Das Projekt ist auf ausgerichtet. Net Framework 4.5
Haben Sie versucht, einen nicht statischen Standardwert für die Sammlung zu verwenden, z.() => neue Liste())? –
Ich denke, Sie sollten testen, wenn Sie das Get on Items tun, wenn der Rückgabewert Null ist oder nicht – Safe
Hallo Geert van Horrik.Wenn ich es mit nicht statischen Werten versuche, bekomme ich das gleiche Ergebnis. Wenn jedoch Liste von List auf meiner MyViewModelBase-Klasse ersetzen, funktioniert alles. Es scheint ein Konflikt mit dem generischen Typ zu sein. –