2017-01-27 5 views
0

Я создаю приложение с Xamarin с использованием общего определения, и мое приложение должно запускаться на Android и в качестве приложения UWP. Это приложение должно показать DataGrid со связанными значениями, и для этого я использую Xamarin.Forms.DataGrid. Я следил за образцом, представленным в репозитории DataGrid, и он отлично работает на Android, но у меня возникает проблема, когда я пытаюсь запустить приложение UWP. Вопрос заключается в том, что, когда я бег как UWP приложения с заполненным списком и попытаться связыванием этого списка на DataGrid, аварий приложений, показывая это исключение:Сбой привязки DataGrid Приложение UWP на Xamarin

"System.Runtime.InteropServices.COMException: Error HRESULT E_FAIL has been returned from a call to a COM component. 
at Windows.UI.Xaml.UIElement.Measure(Size availableSize) 
at Xamarin.Forms.Platform.UWP.VisualElementRenderer`2.MeasureOverride(Size availableSize) 
at Windows.UI.Xaml.UIElement.Measure(Size availableSize) 
at Xamarin.Forms.Platform.UWP.VisualElementRenderer`2.MeasureOverride(Size availableSize) 
at Windows.UI.Xaml.UIElement.Measure(Size availableSize) 
at Xamarin.Forms.Plat" 

Как я уже сказал, это исключение только происходит на UWP, и это происходит только тогда, когда этот список заполняется. Список создается таким образом:

private List<TableValue> _tableValues; 

public List<TableValue> TableValues 
{ 
    get { return _tableValues; } 
    set 
    { 
     TableValues= value; 
     OnPropertyChanged(nameof(TableValues)); 
    } 
} 

private List<TableValue> CreateTableValues() 
{ 
    return new List<TableValue>{ 
     new TableValue{Val1="", Val2="", Val3="", Val4="", Val5="", Val6="", Val7=""} 
    }; 
} 

public async Task PopulateItems() 
{ 
    _tableValues = CreateTableValues(); 
    UpdateProperty(); 
} 

Этот список создается внутри класса MVVM View. DataGrid элемент создания в представлении таким образом:

private ScrollView CreateTable() 
{ 
    table = new DataGrid(); 
    table.Columns.Clear(); 
    table.Columns.AddRange(CreateColumns()); 
    table.SelectionEnabled = true; 
    table.BackgroundColor = Color.White; 
    table.SetBinding(DataGrid.ItemsSourceProperty, new Binding("TableValues")); 
    table.HeaderBackground = Color.FromHex("#D4D0C8"); 
    table.HeaderFontSize = 18; 
    table.HeaderTextColor = Color.FromHex("#08098F"); 

    StackLayout tableStack = new StackLayout 
    { 
     BackgroundColor = Color.White, 
     HeightRequest = 850, 
     VerticalOptions = LayoutOptions.FillAndExpand 
    }; 
    tableStack.Children.Add(table); 

    var scroll = new ScrollView 
    { 
     BackgroundColor = Color.White, 
     Margin = new Thickness(5, 5, 5, 5), 
     Content = tableStack, 
     Orientation = ScrollOrientation.Horizontal, 
     HorizontalOptions = LayoutOptions.FillAndExpand, 
     VerticalOptions = LayoutOptions.FillAndExpand 
    }; 

    return scroll; 
} 

я искал, чтобы найти возможное решение этой проблемы, но я не смог найти какое-либо решение, поскольку вопросы, используя этот DataGrid в Xamarin являются несколько общих.

+0

Я удивлен, что вы не получаете переполнение стека с помощью: 'set { TableValues ​​= value; OnPropertyChanged (nameof (TableValues)); } ', поскольку этот сеттер снова вызовет setter, и снова, и снова и т. Д. Не уверен, что это поможет описать проблему, но попробуйте' _tableValues ​​= значение; 'вместо этого. – jgoldberger

+0

@jgoldberger Я изменил эту строку, следуя вашему ответу, и я заметил проблему, которую вы описали, но основная проблема в таблице все же происходит. –

+0

Тогда я бы предложил подать вопрос о репо для DataGrid, который вы используете, чтобы связаться с авторами пакета. – jgoldberger

ответ

0

В Xamarin.Forms.UWP вложение ListView внутри ScrollView не поддерживается. Вот почему вы рушитесь. См. Больше на bugzilla.

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