2017-03-05 6 views
2

UWPコンボボックスがStackOverflowExceptionを生成しています。UWPコンボボックスのStackOverflowException

<Grid Name="CutoutsGrid" 
    <ListView 
     <ComboBox 
      ItemsSource="{x:Bind CutoutsList}" 
      SelectedItem="{x:Bind CutShape,Mode=TwoWay}" 
     /> 
    </ListView> 
</Grid> 

CutShapeとCutoutsListは、以下から選択する5つの切り欠きを返しCutoutsListビューモデル

public class ViewModel : ViewModelBase 
{ 
    string _CutShape = default(string); 
    public string CutShape { get { return _CutShape; } set { Set(ref _CutShape, value); } } 

    public List<Cutout> CutoutsList { get { return MatboardService.GetCutoutsList(); } } 

に定義されています。

public class Cutout : BindableBase 
{ 
    string _ItemCode = default(string); 
    public string ItemCode { get { return _ItemCode; } set { Set(ref _ItemCode, value); } } 

    string _ItemDescription = default(string); 
    public string ItemDescription { get { return _ItemDescription; } set { Set(ref _ItemDescription, value); } } 

    decimal _MinutesLabor = default(decimal); 
    public decimal MinutesLabor { get { return _MinutesLabor; } set { Set(ref _MinutesLabor, value); } } 
} 

StackOverflowExceptionがこのブロックvalue == ""targetNullValue == null

public static void Set_Windows_UI_Xaml_Controls_Primitives_Selector_SelectedItem(global::Windows.UI.Xaml.Controls.Primitives.Selector obj, global::System.Object value, string targetNullValue) 
{ 
    if (value == null && targetNullValue != null) 
    { 
     value = (global::System.Object) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::System.Object), targetNullValue); 
    } 
    obj.SelectedItem = value; 
} 

Page.g.cs

で起こります。例外は、コンボボックスは、グリッド内のリストビューであるが、例外は、しかし、私が停止する前に、(I 60を数え、多く続いて

public List<Cutout> CutoutsList { get { return MatboardService.GetCutoutsList(); } } 

の最初の呼び出し時に発生した行にobj.SelectedItem = value;

を発生しますカウントする)

Set_Windows_UI_Xaml_Controls_Primitives_Selector_SelectedItem 

なぜこのコンボボックスはStackOverflowExceptionを引き起こしますか?

答えて

1

TwoWay-bindingを削除するか、古いBinding-methodを使用して、この作業を行うことができます。このような例

::

<Grid Name="CutoutsGrid" 
    <ListView 
     <ComboBox 
      ItemsSource="{Binding CutoutsList}" 
      SelectedItem="{Binding CutShape,Mode=TwoWay}" 
     /> 
    </ListView> 
</Grid> 

実際の問題は、VMのCutShapeであなたのセッターはかなり可能性が高いそれは変わらないにもかかわらず、変更された値について通知されるため、StackOverflowExceptionがが発生していることのようです。私はセット方法が何をしているのかわからないんだけど

public string CutShape 
{ 
    get { return _CutShape; } 
    set 
    { 
    if (_CutShape != value) 
     Set(ref _CutShape, value); 
    } 
} 

ていますが、非常に可能性がREF-キーワードを取り除くことができます:だからあなたも試すことができます。

+0

バインディングへの変更はすべてかかりました。ありがとう@Mikael Koskinen – Vague

関連する問題