Thomas'ın cevabı iyi çalışıyor, ancak fazladan bağımlılık özelliğine ihtiyacınız yok. Geçiş düğmesindeki sınıfınız varsa, OnToggle yöntemini geçersiz kılabilirsiniz ve ViewModel'deki IsChecked bağlı özelliğini değiştirirseniz, düğmeniz doğru bir şekilde güncellenir.
Xaml:
<myControls:OneWayFromSourceToTargetToggle x:Name="MyCustomToggleButton"
Command="{Binding Path=ToggleDoStuffCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}}"
IsChecked="{Binding Path=ToggleIsCheckedConditionVar,
Mode=OneWay}"
/>
Eklendi ToggleButton Sınıf: doğru veya yanlış olarak ViewModel sadece set bool ToggleIsCheckedCondition içinde Sonra
public class OneWayFromSourceToTargetToggle : ToggleButton
{
/// <summary>
/// Overrides the OnToggle method, so it does not set the IsChecked Property automatically
/// </summary>
protected override void OnToggle()
{
// do nothing
}
}
. Bu, iyi MVVM uygulamalarını izlediğiniz için bunu yapmanın iyi bir yoludur.
ViewModel:
public bool ToggleIsCheckedCondition
{
get { return _toggleIsCheckedCondition; }
set
{
if (_toggleIsCheckedCondition != value)
{
_toggleIsCheckedCondition = value;
NotifyPropertyChanged("ToggleIsCheckedCondition");
}
}
}
public ICommand ToggleDoStuffCommand
{
get {
return _toggleDoStuffCommand ??
(_toggleDoStuffCommand = new RelayCommand(ExecuteToggleDoStuffCommand));
}
}
private void ExecuteToggleDoStuffCommand(object param)
{
var btn = param as ToggleButton;
if (btn?.IsChecked == null)
{
return;
}
// has not been updated yet at this point
ToggleIsCheckedCondition = btn.IsChecked == false;
// do stuff
}
}
teşekkürler. Bunu deneyeceğim. –
Harika çözüm. – Ross