2013-08-28 24 views
0

所以我有一个单选按钮,我想从未选中变为基于单击按钮进行检查。所以 的XAML代码我是:如何使用MVVM将无线电盒从true更改为false

<RadioButton GroupName="rdoExchange" Grid.Row="2" Grid.Column="0" x:Name="PauseRadioButton" Command="{Binding PauseCommand}" IsChecked="{Binding Path=check, Mode=TwoWay}" Margin="3"/> 

和视图标准守则:

public string check = "True"; 

public void Reset(object obj) 
     { 

      check = "True"; 
     } 

    private ICommand m_PauseCommand; 
    public ICommand PauseCommand 
    { 
     get 
     { 
      return m_PauseCommand; 
     } 
     set 
     { 
      m_PauseCommand = value; 
     } 
    } 

    private ICommand m_ResetCommand; 
     public ICommand ResetCommand 
     { 
      get 
      { 
       return m_ResetCommand; 
      } 
      set 
      { 
       m_ResetCommand = value; 
      } 
     } 

private void SetProperty<T>(ref T field, T value, [CallerMemberName] string name = "") 
     { 
      if (!EqualityComparer<T>.Default.Equals(field, value)) 
      { 
       field = value; 
       var handler = PropertyChanged; 
       if (handler != null) 
       { 
        handler(this, new PropertyChangedEventArgs(name)); 
       } 
      } 
     } 
    } 

我已经离开了relaycommand代码等几个部分,我觉得是不相关的解决问题。

+0

您绑定到一个字段,并且您似乎没有显示我假设调用“SetProperty '的代码来通知属性更改。 'PauseCommand'在哪里?它有什么作用? – Charleh

+0

我更新了代码以显示暂停命令代码。 –

+0

好吧,仍然没有显示任何有用的东西 - 我假设'ResetCommand'是针对'Reset'方法。你需要通知视图,使用'INotifyPropertyChanged'改变了一个属性 - 看起来像'SetProperty '这样做,但是不清楚你是否真的在任何地方调用它... – Charleh

回答

1

会这样的工作?

XAML:

<RadioButton GroupName="rdoExchange" IsChecked="{Binding Path=OptionOneChecked, Mode=TwoWay}"/> 
    <Button Command="{Binding ToggleOptionOne}" Height="20" /> 

视图模型:使用NotificationObject类从PRISM NuGet包

public class ViewModel: NotificationObject 
{ 
    private bool _optionOneChecked; 
    public bool OptionOneChecked 
    { 
     get { return _optionOneChecked; } 
     set 
     { 
      if (value.Equals(_optionOneChecked)) return; 
      _optionOneChecked = value; 
      RaisePropertyChanged("OptionOneChecked"); 
     } 
    } 

    public ICommand ToggleOptionOne 
    { 
     get { return new DelegateCommand(() => OptionOneChecked = !OptionOneChecked); } 
    } 
} 

相关问题