Я создаю приложение с 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 являются несколько общих.
Я удивлен, что вы не получаете переполнение стека с помощью: 'set { TableValues = value; OnPropertyChanged (nameof (TableValues)); } ', поскольку этот сеттер снова вызовет setter, и снова, и снова и т. Д. Не уверен, что это поможет описать проблему, но попробуйте' _tableValues = значение; 'вместо этого. – jgoldberger
@jgoldberger Я изменил эту строку, следуя вашему ответу, и я заметил проблему, которую вы описали, но основная проблема в таблице все же происходит. –
Тогда я бы предложил подать вопрос о репо для DataGrid, который вы используете, чтобы связаться с авторами пакета. – jgoldberger