我目前正在制作具有某些CRUD视图的应用程序。我想在其中一个视图中显示布尔值以编辑行。我使用此答案here来尝试解决此问题。我可以编辑该行一次,如果再试一次,我会得到一个stackoverflow异常(是否更改为布尔值)
资源声明:
<UserControl.Resources>
<bconv:BoolInverterConverter x:Key="BoolInverterConverter" />
</UserControl.Resources>
单选按钮:
<RadioButton Grid.Column="0" GroupName="istemplate"
Content="Yes" IsChecked="{Binding Survey.isTemplate, Mode=TwoWay}" />
<RadioButton Grid.Column="1" GroupName="istemplate" Content="No" Margin="10,0,0,0"
IsChecked="{Binding Survey.isTemplate, Mode=TwoWay, Converter={StaticResource BoolInverterConverter}}" />
我要编辑的布尔值(isTemplate)的项目:
[Table("Survey")]
public class Survey : EntityBase
{
[Required, StringLength(50)]
public string Name { get; set; }
public User ConfirmedBy { get; set; }
public Boolean isTemplate { get; set; }
public Assignment Assignment { get; set; }
public User User { get; set; }
[DataType(DataType.Date)]
public DateTime Date { get; set; }
}
如果我忘记提供一些信息,请询问!
答案 0 :(得分:1)
@ sramalingam24评论已解决了问题
这应该是一个复选框,而不是一对单选按钮,在其中更新一个会调用另一个导致一个周期和堆栈溢出的
我以前使用的帮助程序类可以简单地删除。所有必要的就是CheckBox
答案 1 :(得分:0)
StackOverFlow异常指向递归/无休止地做某事。
我还没有看到您的代码,但是,很奇怪-检查您的绑定器:Survey.isTemplate。您是要分配CLR属性还是Bound属性。
例如:
private string _Name = null;
public string Name
{
get
{
return _Name; // If you do return Name here - it will be overflow exception
}
set
{
_Name = value; // If you do Name = value instead - it will be Overflow exception.
NotifyPropertyChange("Name");
}
}
答案 2 :(得分:0)
我遇到了类似的问题,所以我想分享一下我发现的内容。
原因是您使用的是GroupName 。
GroupName自动重置其余的单选按钮。 它确实触发了viewModel中的其他更新属性。 然后,由于第二个单选按钮更新属性的值相反,因此出现了StackOverflow异常。
并非总是可能替换复选框上的单选按钮。 例如,如果您要通过一个转换器将一个属性绑定到两个以上的单选按钮上。