gpt4 book ai didi

c# - 在 View 模型上收到的 radio 选择选择始终为 null,除了第一次选择

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:50 26 4
gpt4 key购买 nike

我有一个 wpf 窗口,它有四个单选按钮选项和提交按钮。提交按钮绑定(bind)到 MainWindowViewModel.cs 中的 StartWork 命令这个命令进一步指向私有(private)方法来做一些工作。问题是我第一次正确地选择了 radio 选择,当将 radio 选择更改为其他选择(除了第一次选择)时,我以相同的形式获得了 null 作为参数值(字符串 selectedChoice)

MainWindow.xaml

<Window.Resources>        
<Helpers:BooleanToStringValueConverter x:Key="BoolToStrValueConverter" />
</Window.Resources>

<Grid>
<StackPanel Orientation="Horizontal" VerticalAlignment="Top">
<Label>STATUS:</Label>
<Label Content="{Binding Path=Status, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Width="200" />
</StackPanel>
<!-- radio buttons -->
<StackPanel Orientation="Horizontal" Width="288" Height="20" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="100,200,0,0">
<RadioButton GroupName="Site" x:Name="All" Content="Sve" Width="50"
IsChecked="{Binding Site, ConverterParameter=All, Converter={StaticResource BoolToStrValueConverter}}"/>
<RadioButton GroupName="Site" x:Name="SelOne" Content="SelOne" Width="90"
IsChecked="{Binding Site, ConverterParameter=SelOne, Converter={StaticResource BoolToStrValueConverter}}"/>
<RadioButton GroupName="Site" x:Name="SelTwo" Content=" SelTwo " Width="70"
IsChecked="{Binding Site, ConverterParameter= SelTwo, Converter={StaticResource BoolToStrValueConverter}}"/>
<RadioButton GroupName="Site" x:Name="SelThree" Content=" SelThree " Width="80"
IsChecked="{Binding Site, ConverterParameter= SelThree, Converter={StaticResource BoolToStrValueConverter}}"/>
</StackPanel>
<!-- /radio buttons -->
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" Margin="200, 20, 0, 20">
<Button Command="{ Binding StartWorkCommand }" Content="Run" Width="100" Height="50" />
</StackPanel>
</Grid>

MainWindowViewModel.cs(实现 ViewModelBase.cs)

private ICommand _StartWorkCommand;
private string _Status;
private string _Site;
public string Status {
get {
return _Status;
}
set {
_Status= value;
OnPropertyChanged("Status ");
}
}
public string Site
{
get { return _Site; }
set
{
_Site = value;
}
}
public ICommand StartWorkCommand {
get {
if (_StartWorkCommand == null) {
_StartWorkCommand = new RelayCommand(
x => this.DoWork(this.Site));
}
return _StartWorkCommand;
}
}

private void DoWork(string selectedChoice){
… switch …
}

同样,问题是:为什么我在 DoWork 方法上仅针对第一个选择的单选选项获得正确的值作为参数,之后任何其他选择都是空的?

编辑

public class BooleanToStringValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToString(value).Equals(System.Convert.ToString(parameter)))
{
return true;
}
return false;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToBoolean(value))
{
return parameter;
}
return null;
}
}

最佳答案

您的 ConvertBack 函数中的 return null; 正在帮助您。

相反,使用 Binding.DoNothing:

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (System.Convert.ToBoolean(value))
{
return parameter;
}
return Binding.DoNothing;
}

null 是对象的完全有效值,因此当转换器运行时,它将支持属性设置为 null。您希望它忽略该值,因此需要 Binding.DoNothing

关于c# - 在 View 模型上收到的 radio 选择选择始终为 null,除了第一次选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com