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 个以上的单选按钮上绑定一个 属性。
我目前正在制作一个具有一些 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 个以上的单选按钮上绑定一个 属性。