2017-01-27 9 views
0

私は共有定義を使用してXamarinでアプリケーションを作成しています。アプリケーションはAndroidとUWPアプリケーションで実行する必要があります。このアプリケーションは、バインド可能な値を持つDataGridを表示する必要があります。このために私はXamarin.Forms.DataGridを使用しています。私はDataGridのリポジトリに表示されたサンプルをフォローしていましたが、Android上ではうまく動作しますが、UWPアプリケーションとして実行しようとすると問題が発生します。XamarinのDataGridバインディングがクラッシュする

"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アプリとして実行すると、この例外を示す、データグリッド、アプリがクラッシュした上で、このリストを結合しようとすると、ということですUWPであり、このListが移入されるときにのみ発生します。リストは次のように作成されます。

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クラス内に作成されます。 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; 
} 

をXamarinにこのデータグリッドを使用した質問であるため、私はこの問題の可能な解決策を見つけるために検索が、私は、任意の解決策を見つけることができませんでしたいくつかの共通点。

+0

スタックオーバフローが発生しないことに驚いています: 'set { TableValues = value; OnPropertyChanged(nameof(TableValues)); } 'setterが再びsetterを呼び出すので、何度も何度も繰り返します。これが問題の説明に役立つかどうかは分かりませんが、代わりに' _tableValues = value; 'を試してください。 – jgoldberger

+0

@jgoldbergerあなたの答えに沿ってその行を変更しましたが、あなたが説明した問題に気付きましたが、テーブルの主な問題はまだ発生します。 –

+0

次に、パッケージ作成者に連絡するために使用しているDataGridのレポに関する問題を提出することをお勧めします。 – jgoldberger

答えて

0

Xamarin.Forms.UWPでは、ScrollView内でListViewをネストすることはサポートされていません。それはあなたがクラッシュしている理由です。 bugzillaの詳細を参照してください。

関連する問題