如何取消选中WPF中的单选按钮(MVVM)填写表格不是强制性选项。最初,所有单选按钮都未选中。如果用户不小心点击了其中一个,他就不能返回了,因为至少需要勾选一个。那么如何在不强迫用户做出不必要的选择的情况下取消选中单选按钮呢?ps表单是在运行时构建的,我遵循MVVM设计模式。对于强制选择,单选按钮解决方案是完美的,我在这种情况下使用了它。就个人而言,当我想要这种行为时,我使用ListBox并覆盖模板以使用RadioButtons。它是执行以下所有操作的完美控件:我自定义了ListBox的样式以删除边框和背景颜色,并使用RadioButton绘制每个项目,并将IsChecked绑定到ListBoxItem.IsSelected。通常是这样的:显示RadioButtons本身通常非常简单,如下所示:我在XAML的代码隐藏中为此场景使用了一些事件处理程序:PrivateJustCheckedasBooleanPrivateSubRB_Checked(senderAsObject,eAsRoutedEventArgs)DimsAsRadioButton=sender'ActiononCheck...JustChecked=TrueEndSubPrivateSubRB_Clicked(senderAsObject,eAsRoutedEventArgs)IfJustCheckedThenJustChecked=Falsee.Handled=TrueReturnEndIfDimsAsRadioButton=senderIfs.IsCheckedThens.IsChecked=FalseEndSub或者在C#privateboolJustChecked;privatevoidRB_Checked(objectsender,RoutedEventArgse){RadioButtons=sender;//检查动作...JustChecked=true;}privatevoidRB_Clicked(objectsender,RoutedEventArgse){if(JustChecked){JustChecked=false;e.Handled=true;返回;}RadioButtons=发件人;如果(s.IsChecked)s.IsChecked=false;}点击CheckedEventForeventtrigger之后试试这个:publicclassOptionalRadioButton:RadioButton{#regionboolIsOptionaldepen密度属性publicstaticDependencyPropertyIsOptionalProperty=DependencyProperty.Register("IsOptional",typeof(bool),typeof(OptionalRadioButton),newPropertyMetadata((bool)true,(obj,args)=>{((OptionalRadioButton)obj).OnChangsed(可选参数);}));publicboolIsOptional{get{return(bool)GetValue(IsOptionalProperty);}set{SetValue(IsOptionalProperty,value);}}privatevoidOnIsOptionalChanged(DependencyPropertyChangedEventArgsargs){//ifeventAddler:needed}#endregionprotectedoverridevoidOnClick(){bool?wasChecked=this.IsChecked;base.OnClick();如果(this.IsOptional&&wasChecked==true)this.IsChecked=false;你的单选按钮:一些单选按钮代码隐藏:MyRadioButton.IsChecked=false;如果您想使用绑定来取消选中它:代码隐藏:publicpartialclassMainWindow:Window,INotifyPropertyChanged{publicMainWindow(){InitializeComponent();这个.DataContext=这个;}#regionINotifyPropertyChangedpublic甚至tPropertyChangedEventHandlerPropertyChanged;publicvoidOnPropertyChanged(stringname){if(PropertyChanged!=null)PropertyChanged(this,newPropertyChangedEventArgs(name));}#endregionprivatebool_isRadioChecked;公共布尔IsRadioChecked{得到{返回_isRadioChecked;}设置{_isRadioChecked=值;OnPropertyChanged("IsRadioChecked");}}}xaml(view):SomeRadioButton正如@Tomtom指出的那样,您可以使用复选框,但这也会同时检查多个选项,或者您必须实现一种复杂的机制以确保只检查一个选项一个时间。另一个非常便宜的解决方法是在单选按钮选项中添加一个额外的条目。你是怎么知道我们的?我同意Tomtom的观点,即RadioButton可能不是最佳设计选择,但如果该选择超出您的控制或出于其他原因需要,那么您将需要某种机制来强制取消选择。以下是一些可能性:由于表单是在运行时构建的,因此在创建控件时需要附加相应的事件处理程序,如下所示://创建控件的实例varcontrolType=typeof(Control).Assembly。GetType(fullyQualifiedControl,true);varcontrol=Activator.CreateInstance(controlType);switch(fullyQualifiedControl){case"System.Windows.Controls.RadioButton":((RadioButton)control).Checked+=newRoutedEventHandler(DataDrivenControl_Checked);((RadioButton)control).Unchecked+=newRoutedEventHandler(DataDrivenControl_UnChecked);休息;肮脏的方法是创建一个折叠的RadioButton如果用户点击一个已经选中的RadioButton,检查privatevoidRadioButton_OnPreviewMouseDown(objectsender,MouseButtonEventArg)后面是否有一个空的RadioButton代码如果(radioButton.IsChecked.GetValueOrDefault()){rbEmpty.IsChecked=true;e.Handled=true;我知道这个答案今天有点晚了,但我在使用UWP时遇到了类似的问题,并认为这可能会有所帮助。undefinedsetRBPevStates("RB2");}休息;case"RB3":if(rb3PrevState==true){rbtn.IsChecked=false;rb3PrevState=false;}else{rb3PrevState=true;ResetRBPrevStates("RB3");}休息;case"RB4":if(rb4PrevState==true){rbtn.IsChecked=false;rb4PrevState=false;}else{rb4PrevState=true;ResetRBPrevStates("RB4");}休息;case"RB5":if(rb5PrevState==true){rbtn.IsChecked=false;rb5PrevState=false;}else{rb5PrevState=true;ResetRBPrevStates("RB5");}休息;默认值:中断;}}}}privatevoidResetRBPevStates(string_excludeRB){derb1PrevStateR=(_exc=="RB1"?rb1PrevState:false);rb2PrevState=(_excludeRB=="RB2"?rb2PrevState:false);rb3PrevState=(_excludeRB=="RB3"?rb3PrevState:false);rb4PrevState=(_excludeRB=="RB4"?rb4PrevState:false);rb5PrevState=(_excludeRB=="RB5"?rb5PrevState:false);这对我来说很好,就我而言,不违反任何MVVM规则单击它以选中和取消选中单选按钮。国际点击=0;privatevoidRadioButton_Click(objectsender,RoutedEventArgse){click++;((RadioButton)sender).IsChecked=click%2==1;点击%=2;在这种情况下,您不应使用RadioButtons。此控件的目的是始终检查一个。在您的情况下,我更愿意使用无法取消选中RadioButton的CheckBox。如果您必须继续使用RadioButton,我会添加一个默认的“未选中”选项。在这种情况下,我更喜欢带有空项目或顶部有清除按钮的ComboBox。以上就是C#学习教程:WPF(MVVM)中如何取消勾选单选按钮共享的所有内容。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
