我遇到了一个有趣的问题。
摘要:我无法从ViewModel更改切换按钮的状态。 Microsoft ToggleButton以及Telerik Controls也存在同样的问题。
视图模型:
private bool? _isToggleChecked;
public bool? IsToggleChecked
{
get { return _isToggleChecked; }
set
{
if(_isToggleChecked == value)
return;
_isToggleChecked = value;
RaisePropertyChanged(()=>IsToggleChecked);
}
}
public VM()
{
FireCommand = new DelegateCommand(OnFire);
}
private void OnFire()
{
if (IsToggleChecked == null)
{
IsToggleChecked = true;
return;
}
IsToggleChecked = !IsToggleChecked;
}
public DelegateCommand FireCommand { get; set; }
查看:(可以使用Microsoft ToggleButton,但行为相同)
<Grid x:Name="LayoutRoot" Background="White">
<StackPanel>
<telerik:RadToggleButton Height="50" IsChecked="{Binding IsToggleChecked}" />
<Button Command="{Binding FireCommand}" Height="20" />
</StackPanel>
</Grid>
查看代码背后:
public MainPage()
{
InitializeComponent();
DataContext = new VM();
}
这怎么可能?如何更改切换状态programmaticaly?
非常感谢,
答案 0 :(得分:2)
当我将按钮绑定到命令时,我在RadRibbonToggleButton上绑定IsChecked时出现问题。
我找到的解决方法是使用双向绑定,但使用UpdateSourceTrigger = Explicit阻止绑定更新源
IsChecked="{Binding IsLocked, Mode=TwoWay, UpdateSourceTrigger=Explicit}"
这适合我。
它被描述为WPF here
中的已知问题答案 1 :(得分:1)
对我而言,这是一个Nullable
属性问题, telerik 控件由于某种原因不支持。如果是这样,请查看提供商的网站以获取可用的解决方案/服务包,或者只需将您的属性设置为 NON Nullable
并重构您的代码。
问候。