2017-03-05 44 views
2

UWP ComboBox正在生成StackOverflowException。UWP ComboBox中的StackOverflowException

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

CutShape和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(); } } 

CutoutsList定义返回5周的切口可供选择。

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在Page.g.cs

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; 
} 

发生在此块中value == ""targetNullValue == null。虽然组合框是在网格中的ListView发生就行了obj.SelectedItem = value;

例外,但是其后面是许多在第一次通话发生

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

外(我算60我停止前计数)来电

Set_Windows_UI_Xaml_Controls_Primitives_Selector_SelectedItem 

为什么此ComboBox会导致StackOverflowException?

回答

1

您很可能通过删除TwoWay绑定或使用旧的Binding方法来完成此项工作。

例如这样的:

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

的实际问题似乎是在StackOverflowException造成,因为你在虚拟机的CutShape制定者很可能通知关于改变的值,即使它不会改变。所以,你也可以尝试:

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

我不知道什么设置,方法是做什么,但你可以很容易摆脱REF-关键字。

+0

更改为绑定是所需要的。谢谢@Mikael Koskinen – Vague