我正在尝试创建一种情况,其中两个 ToggleButton
的分组中的一个或没有一个可以随时打开。我遇到的问题是,如果我更改了支持变量的状态,则 UI 状态不会更新。
我确实实现了 INotifyPropertyChanged
。
我已经像这样创建了我的 ToggleButton
:
<ToggleButton IsChecked="{Binding Path=IsPermanentFailureState, Mode=TwoWay}"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center">
<TextBlock TextWrapping="Wrap"
TextAlignment="Center">Permanent Failure</TextBlock>
</ToggleButton>
<ToggleButton IsChecked="{Binding Path=IsTransitoryFailureState, Mode=TwoWay}"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center">
<TextBlock TextWrapping="Wrap"
TextAlignment="Center">Temporary Failure</TextBlock>
</ToggleButton>
这是我的支持属性(我使用的是 MVVM 模式,其他绑定(bind)有效,IE 单击
ToggleButton
确实会进入这些属性设置。当我通过代码更改状态时,切换按钮不会更改视觉状态。IE我将 backing 属性设置为 false,但按钮保持选中状态。 public bool? IsPermanentFailureState
{
get { return isPermFailure; }
set
{
if (isPermFailure != value.Value)
{
NotifyPropertyChanged("IsPermanentFailureState");
}
isPermFailure = value.Value;
if (isPermFailure) IsTransitoryFailureState = false;
}
}
public bool? IsTransitoryFailureState
{
get { return isTransitoryFailureState; }
set
{
if (isTransitoryFailureState != value.Value)
{
NotifyPropertyChanged("IsTransitoryFailureState");
}
isTransitoryFailureState = value.Value;
if (isTransitoryFailureState) IsPermanentFailureState = false;
}
}
最佳答案
问题只是您在实际更改属性值之前引发了属性更改通知。因此,WPF 读取属性的旧值,而不是新值。改成这样:
public bool? IsPermanentFailureState
{
get { return isPermFailure; }
set
{
if (isPermFailure != value.Value)
{
isPermFailure = value.Value;
NotifyPropertyChanged("IsPermanentFailureState");
}
if (isPermFailure) IsTransitoryFailureState = false;
}
}
public bool? IsTransitoryFailureState
{
get { return isTransitoryFailureState; }
set
{
if (isTransitoryFailureState != value.Value)
{
isTransitoryFailureState = value.Value;
NotifyPropertyChanged("IsTransitoryFailureState");
}
if (isTransitoryFailureState) IsPermanentFailureState = false;
}
}
顺便说一句,你说当你使用界面而不是代码时它可以工作,但我看不出它可能。
关于WPF ToggleButton IsChecked 绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1378894/