Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确保一次只选中一个复选框_C#_Wpf_Checkbox_Mvvm - Fatal编程技术网

C# 确保一次只选中一个复选框

C# 确保一次只选中一个复选框,c#,wpf,checkbox,mvvm,C#,Wpf,Checkbox,Mvvm,我有WPF数据网格,其中包含两行复选框: <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*" /> <ColumnDefinition Width="3*"/> </Grid.ColumnDefinitions> <DataGrid VerticalAlignment="Stretch"

我有WPF数据网格,其中包含两行复选框:

  <Grid>
     <Grid.ColumnDefinitions>
       <ColumnDefinition Width="*" />
       <ColumnDefinition Width="3*"/>
     </Grid.ColumnDefinitions>
     <DataGrid VerticalAlignment="Stretch" 
               HorizontalAlignment="Stretch"
               Name="dsGrid"
               AutoGenerateColumns="False" Grid.Column="1" >
       <DataGrid.Columns>     
         <DataGridTextColumn Header="Properties Name" MinWidth="150" Binding="{Binding Propertie}" />     
                 <DataGridTemplateColumn Header=" Server " MinWidth="150" >
                     <DataGridTemplateColumn.CellTemplate>
                         <DataTemplate>
                             <StackPanel>
                                 <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                 <TextBlock Name="PropertiesTextBlock" 
                                            HorizontalAlignment="Right" 
                                            VerticalAlignment="Center" 
                                            Text="{Binding Server}"
                                            Grid.Column="1"/>
                                 <CheckBox IsChecked="{Binding                                       Path=IsServerSelected, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                           Checked="Server_Checked" 
                                           VerticalAlignment="Center"
                                           HorizontalAlignment="Left" 
                                           Visibility="{Binding Equal,
                                           Converter={StaticResource BoolToVisibility},FallbackValue=Hidden}" 
                                           Grid.Column="0"/>
                                </Grid>     
                             </StackPanel>
                         </DataTemplate>
                     </DataGridTemplateColumn.CellTemplate>
                 </DataGridTemplateColumn>     
                 <DataGridTemplateColumn Header=" Local " MinWidth="150">
                     <DataGridTemplateColumn.CellTemplate>
                         <DataTemplate>
                             <StackPanel>
                                 <Grid>
                                     <Grid.ColumnDefinitions>
                                         <ColumnDefinition Width="*" />
                                         <ColumnDefinition Width="*"/>
                                     </Grid.ColumnDefinitions>
                                     <TextBlock Name="PropertiesTextBlock" 
                                                HorizontalAlignment="Right" 
                                                Text="{Binding Local}" 
                                                Grid.Column="1"/>
                                     <CheckBox IsChecked="{Binding Path=IsLocalSelected, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
                                               Checked="Local_Checked" HorizontalAlignment="Left"
                                               Visibility="{Binding Equal, Converter={StaticResource BoolToVisibility},FallbackValue=Hidden}"       Grid.Column="0"></CheckBox>
                                 </Grid>
                             </StackPanel>
                         </DataTemplate>
                     </DataGridTemplateColumn.CellTemplate>
                 </DataGridTemplateColumn>     
             </DataGrid.Columns>
         </DataGrid>
         <ListBox HorizontalAlignment="Stretch"
                  VerticalAlignment="Stretch"  Name="Entities_List"
                  SelectionChanged="Entities_List_SelectionChanged"
                  SelectionMode="Single"
                  Grid.Column="0"/>
         <Button Content="Merge"
                 Name="Merge_Button"
                 Click="Merge_Button_Click"
                 HorizontalAlignment="Stretch"
                 VerticalAlignment="Bottom"
                 Grid.Column="0"  />
     </Grid>
我的需要是确保一次只选中一个复选框。
因此,如果选中ServerCheckBox,我想取消选中LocalCheckBox。

您几乎获得了所需的一切:

    public bool IsLocalSelected
    {
        get
        {
            return pIsLocalSelected;
        }
        set //LocalSelected is Set: -> UnSet Server
        {
            pIsLocalSelected = value;
            OnPropertyChanged("IsLocalSelected");
            IsServerSelected = false;
            OnPropertyChanged("IsServerSelected");
        }
    }

    public bool IsServerSelected
    {
        get
        {
            return pIsServerSelected;
        }
        set //ServerSelected is Set: -> UnSet Local
        {
            pIsServerSelected = value;
            OnPropertyChanged("IsServerSelected");
            IsLocalSelected = false;
            OnPropertyChanged("IsLocalSelected");
        }
    }
这样就行了

但这将创建一个无限循环…

为了以最简单的方式解决此问题,我建议使用
单选按钮
而不是
复选框

如果选择了本地,则服务器将被取消选择,反之亦然。

我已修复了您问题中的格式设置。你会从阅读帮助页中受益,了解未来的问题。如果我添加了这些更改,我将有步兵循环。当然,我应该看到这一点。我强烈建议你改用单选按钮。我仍然有StackOverflowException(@Fe De只需使用单选按钮,你就不需要再禁用另一个。我使用单选按钮。这里可能有问题:IsChecked=“{Binding Path=IsLocalSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}”@Fe De
    public bool IsLocalSelected
    {
        get
        {
            return pIsLocalSelected;
        }
        set //LocalSelected is Set: -> UnSet Server
        {
            pIsLocalSelected = value;
            OnPropertyChanged("IsLocalSelected");
            IsServerSelected = false;
            OnPropertyChanged("IsServerSelected");
        }
    }

    public bool IsServerSelected
    {
        get
        {
            return pIsServerSelected;
        }
        set //ServerSelected is Set: -> UnSet Local
        {
            pIsServerSelected = value;
            OnPropertyChanged("IsServerSelected");
            IsLocalSelected = false;
            OnPropertyChanged("IsLocalSelected");
        }
    }