【发布时间】:2020-10-31 01:19:09
【问题描述】:
我有一个带有自定义枚举的组合框(只是真/假)。我有一个函数,如果 SelectedValue 从 false 变为 true,并且如果条件错误,它将组合框 SelectedValue 更改回 false,它会检查条件。如果您在代码中检查它,这会将 SelectedValue 更改为 false,但是当您查看 UI 时,它仍然为 true。
这是组合框的 xaml:
<ComboBox x:Name="comboEnabled1" Width="80" Height="26"
ItemsSource="{Binding Path=TrueFalseChoices}"
SelectedValue="{Binding Path=Enable1, Mode=TwoWay}"/>
这是视图模型
private TrueFalse _enable1 = TrueFalse.False;
public TrueFalse Enable1
{
get { return _enable1; }
set
{
if (_enable1 != value)
{
_enable1 = value;
base.OnPropertyChanged("Enable1");
OnEnableChanged(EventArgs.Empty);
}
}
}
这是我用来检查条件的函数
public void HandleEnable(object sender, EventArgs e)
{
if(Enable1 == TrueFalse.True)
{
if(!connected)
{
HandleMessage("Can't enable, not connected");
Enable1 = TrueFalse.False;
}
else if (!_main.CBCheck(_main.cbReason))
{
Enable1 = TrueFalse.False;
}
}
Console.WriteLine("Enabled {0}", Enable1);
}
我认为我更改值的速度太快了,但最后一个 Console.Writeline 每次都会产生正确的结果。
任何帮助表示赞赏!
编辑:在此处调用 Handleenable:
protected void OnEnableChanged(EventArgs e)
{
EventHandler handler = EnableChanged;
if (handler != null)
handler(this, e);
}
在 ViewModel 函数中:
EnableChanged += HandleEnable;
在任何其他地方更改 Enable1 都可以正常工作,只是在 HandleEnable 函数中存在问题。还尝试更改 HandleEnable 函数中的其他组合框,并且应该可以正常工作。
【问题讨论】:
-
您如何以及何时调用 HandleEnable?你能展示一下 TrueFalseChoices 集合的方式和内容是什么
-
TrueFalseChoices 是我的自定义枚举,它包含 2 个值,真和假。
static private readonly List<TrueFalse> _TRUEFALSE_CHOICES = new List<TrueFalse>(); static MainViewModel() { _TRUEFALSE_CHOICES.Add(TrueFalse.False); _TRUEFALSE_CHOICES.Add(TrueFalse.True); } -
集合是私有的和静态的。如果没有静态标记扩展,您如何绑定它或帖子中缺少某些内容?
-
很可能类似于
public IEnumerable<TrueFalse> TrueFalseChoices => _TRUEFALSE_CHOICES;——但这并不重要。我已经回答过了,他可能已经解决了这个问题。 -
你高估了我@Thehx 真的只是得到它。你对 neelesh 的回答完全正确