2017-02-16 9 views
1

У меня есть проект UWP, работающий в Windows 10. В моем mainpage.xml у меня есть RadDataGrid, который я привязываю к коллекции на моей модели просмотра, это работает правильно во время выполнения. Однако во время разработки я получаю исключение, которое мешает мне использовать конструктор. Если я удалю ItemSource из raddatagrid, дизайнер отлично работает, поэтому я думаю, что это как-то связано с этим, но я не уверен, что.Исключение несоответствия счетчика параметров во время разработки при использовании itemssource свойства raddatagrid

Большое спасибо

XAML фрагменты:

<Page x:Class="UWP.MainPage"  
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
     xmlns:local="using:UWP" 
     xmlns:common="using:DataObjects"  
     xmlns:tgrid="using:Telerik.UI.Xaml.Controls.Grid" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d"> 

<tgrid:RadDataGrid x:Name="DataGrid" 
        ItemsSource="{x:Bind Path=ViewModel.Tasks}" 
        Grid.Row="1" Grid.Column="0">      
</tgrid:RadDataGrid> 

Модель сниппет:

public ObservableRangeCollection<DataObjects.Task> Tasks { get; } 

Стек след:

TargetParameterCountException: Parameter count mismatch. 

at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture) 
    at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index) 
    at Telerik.Data.Core.BindingExpressionHelper.<>c__DisplayClass0_0.<CreateGetValueFunc>b__0(Object item) 
    at Telerik.Data.Core.Fields.PropertyInfoFieldInfo.GetValue(Object item) 
    at Telerik.UI.Xaml.Controls.Grid.DataGridTypedColumn.GetValueForInstance(Object instance) 
    at Telerik.UI.Xaml.Controls.Grid.Model.GridModel.Telerik.UI.Xaml.Controls.Grid.ITable.GetCellValue(ItemInfo rowItemInfo, ItemInfo columnItemInfo) 
    at Telerik.UI.Xaml.Controls.Grid.CellsController`1.GetCellDecorator(IItemInfoNode parentRow, ItemInfo columnItemInfo, Int32 rowLine, Int32 columnLine) 
    at Telerik.UI.Xaml.Controls.Grid.CellsController`1.GenerateCellsForRow(IItemInfoNode rowDecorator, Int32 rowSlot) 
    at Telerik.UI.Xaml.Controls.Grid.Model.GridModel.GenerateCellsForReadOnlyRow(Int32 rowSlot, Double largestRowElementWidth, IItemInfoNode rowDecorator) 
    at Telerik.UI.Xaml.Controls.Grid.Model.GridModel.Telerik.UI.Xaml.Controls.Grid.ITable.GenerateCellsForRow(Int32 rowSlot, Double largestRowElementHeight, IItemInfoNode rowDecorator) 
    at Telerik.UI.Xaml.Controls.Grid.NodePool`2.GenerateCellsForLine(Int32 slot, Double largestLength, T lastElement) 
    at Telerik.UI.Xaml.Controls.Grid.NodePool`2.GenerateContainer(IList`1 itemInfos) 
    at Telerik.UI.Xaml.Controls.Grid.NodePool`2.MeasureForward(MeasureContext& context) 
    at Telerik.UI.Xaml.Controls.Grid.NodePool`2.MeasureVertically(RadSize availableSize, Double offset, Double bufferScale) 
    at Telerik.UI.Xaml.Controls.Grid.NodePool`2.OnMeasure(RadSize availableSize, Double offset, Int32 frozenElementsCount, Double verticalBufferScale) 
    at Telerik.UI.Xaml.Controls.Grid.Model.GridModel.MeasureCells(RadSize newAvailableSize) 
    at Telerik.UI.Xaml.Controls.Grid.RadDataGrid.OnCellsPanelMeasure(RadSize newAvailableSize) 
    at Telerik.UI.Xaml.Controls.Grid.Primitives.DataGridCellsPanel.MeasureOverride(Size availableSize) 
    at Windows.UI.Xaml.UIElement.Measure(Size availableSize) 
    at Telerik.UI.Xaml.Controls.Grid.Primitives.DataGridRootPanel.MeasureOverride(Size availableSize) 
    at Windows.UI.Xaml.FrameworkElement.MeasureOverride(Size availableSize) 
    at Telerik.UI.Xaml.Controls.RadControl.MeasureOverride(Size availableSize) 
    at Windows.UI.Xaml.UIElement.UpdateLayout() 

ответ

0

Если что-то, что может нарушить ваш пользовательский интерфейс, вы можете использовать что-то например:

private static bool? _isInDesignMode; 

/// <summary> 
/// Gets a value indicating whether the control is in design mode (running in Blend 
/// or Visual Studio). 
/// </summary> 
public static bool IsInDesignModeStatic 
{ 
    get 
    { 
     if (!_isInDesignMode.HasValue) 
     { 
#if SILVERLIGHT 
      _isInDesignMode = DesignerProperties.IsInDesignTool; 
#else 
      var prop = DesignerProperties.IsInDesignModeProperty; 
      _isInDesignMode 
       = (bool)DependencyPropertyDescriptor 
       .FromProperty(prop, typeof(FrameworkElement)) 
       .Metadata.DefaultValue; 
#endif 
     } 

     return _isInDesignMode.Value; 
    } 
} 

Это свойство защитит ваш код, и оно не будет выполнено в режиме разработки. Также вы можете использовать библиотеку MVVM, такую ​​как MVVMLight или что-то еще.

Смежные вопросы