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

WPF Showing a boolean with radiobuttons

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

资源声明:

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

如果我忘了包含一些信息,请询问!

Whosebug 异常指向 Recursively/Endlessly 正在做某事。

我还没有看到你的代码,但是,大胆猜测 - 检查你的 Setter 绑定: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");
    }
}

感谢@sramalingam24 的评论,问题已解决

That should be a check box not a pair of radio buttons, where updating one calls the other leading to a cycle and the stack overflow

我之前使用的助手class可以直接删除。只需要 CheckBox

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

原因是您正在使用 GroupName

GroupName 自动重置其余单选按钮。 它确实触发了 viewModel 中的额外更新 属性。 然后你得到 Whosebug 异常,因为第二次单选按钮更新 属性 具有相反的值。

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