WPF显示带有单选按钮的布尔值

时间:2018-11-15 22:46:15

标签: c# wpf data-binding stack-overflow staticresource

我目前正在制作具有某些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; }
}

如果我忘记提供一些信息,请询问!

3 个答案:

答案 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异常。

并非总是可能替换复选框上的单选按钮。 例如,如果您要通过一个转换器将一个属性绑定到两个以上的单选按钮上。