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

C# WPF显示带有单选按钮的布尔值,c#,wpf,data-binding,stack-overflow,staticresource,C#,Wpf,Data Binding,Stack Overflow,Staticresource,我目前正在制作一个有一些CRUD视图的应用程序。我想在我的一个视图中显示一个布尔值来编辑一行。我用这个答案试图解决这个问题。我可以编辑该行一次,如果我再次尝试,则会出现stackoverflow异常(无论是否更改为布尔值) 资源声明: <UserControl.Resources> <bconv:BoolInverterConverter x:Key="BoolInverterConverter" /> </UserControl.Resources>

我目前正在制作一个有一些CRUD视图的应用程序。我想在我的一个视图中显示一个布尔值来编辑一行。我用这个答案试图解决这个问题。我可以编辑该行一次,如果我再次尝试,则会出现stackoverflow异常(无论是否更改为布尔值)

资源声明:

<UserControl.Resources>
    <bconv:BoolInverterConverter x:Key="BoolInverterConverter" />
</UserControl.Resources>

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

StackOverFlow异常指向递归/无休止地做某事

我还没有看到您的代码,但是,请随意猜测-检查您绑定的Setter:Survey.isTemplate。您正在分配CLR属性还是绑定属性

例:


由于@sramalingam24的评论,问题已经解决


这应该是一个复选框,而不是一对单选按钮,其中更新一个会调用另一个,从而导致循环和堆栈溢出


我之前使用的helper类可以简单地删除。所需要的只是复选框

我遇到了类似的问题,所以我想分享我的发现

原因是您正在使用GroupName

GroupName自动重置其余单选按钮。 它确实会触发viewModel中的其他更新属性。 然后您得到了StackOverflow异常,因为第二个单选按钮更新属性的值正好相反

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

这应该是一个复选框,而不是一对单选按钮,其中更新一个会调用另一个,导致循环和堆栈overflow@sramalingam24除了复选框在a.t.m.时反转之外,它确实起作用,谢谢:)我刚刚用你提供的链接中的代码和转换器制作了一个小程序。它按预期工作。您提供的代码中没有异常。我的猜测是,它在您的ViewModel中。当你闯入调试器时,调用堆栈会告诉你什么?这正是发生在我身上的事情。将两个单选按钮绑定到相同的布尔属性(其中一个带有invertedbooleanconverter),作为习惯,我将它们作为相同的组名。解决方案正是@Anton建议的:如果您想保持视图模型不变,只需删除单选按钮上的GroupName属性。
<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}}" />
[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; }
}
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");
    }
}