Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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# 将值绑定到ListView中的单选按钮和复选框_C#_Wpf_Listview_Data Binding - Fatal编程技术网

C# 将值绑定到ListView中的单选按钮和复选框

C# 将值绑定到ListView中的单选按钮和复选框,c#,wpf,listview,data-binding,C#,Wpf,Listview,Data Binding,我有一个ListView,它有一个包含单选按钮的列和一个包含复选框的列。我想做的是将这个单选按钮绑定到一个基于属性的int值的值 我的ListView如下所示: <ListView x:Name="lvSalesmen" ItemsSource="{Binding}" Margin="311,32,0,244" Grid.ColumnSpan="5"> <ListView.Vi

我有一个ListView,它有一个包含单选按钮的列和一个包含复选框的列。我想做的是将这个单选按钮绑定到一个基于属性的int值的值

我的ListView如下所示:

   <ListView x:Name="lvSalesmen" ItemsSource="{Binding}" Margin="311,32,0,244" Grid.ColumnSpan="5">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Id" DisplayMemberBinding="{Binding Path=Id}"/>
                <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Path=FirstName}"/>
                <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding Path=LastName}"/>
                <GridViewColumn Header="IsResponsible">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="IsResponsible" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="IsSecondary">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView> 
    public class DistrictsListViewModel : INotifyPropertyChanged {
    
        public event PropertyChangedEventHandler PropertyChanged = delegate { };
    
        private List<Salesman> _salesman;
        private ISalesmenService _salesmenService = new SalesmenService();
    
        public DistrictsListViewModel()
        {
        }
    
        public async void GetAllSalesmenWithResponsibilityByDistrictId( int id)
        {
            Salesmen = await _salesmenService.GetSalesmanReponsibilityByDistrictIdAsync(id);
        }
    
        public List<Salesman> Salesmen {
            get { return _salesman; }
            set {
                _salesman = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Salesmen"));
            }
        }
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int IsResponsible { get; set; }
public int IsSecondary { get; set; }
我的ViewModel如下所示:

   <ListView x:Name="lvSalesmen" ItemsSource="{Binding}" Margin="311,32,0,244" Grid.ColumnSpan="5">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Id" DisplayMemberBinding="{Binding Path=Id}"/>
                <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Path=FirstName}"/>
                <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding Path=LastName}"/>
                <GridViewColumn Header="IsResponsible">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="IsResponsible" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Header="IsSecondary">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView> 
    public class DistrictsListViewModel : INotifyPropertyChanged {
    
        public event PropertyChangedEventHandler PropertyChanged = delegate { };
    
        private List<Salesman> _salesman;
        private ISalesmenService _salesmenService = new SalesmenService();
    
        public DistrictsListViewModel()
        {
        }
    
        public async void GetAllSalesmenWithResponsibilityByDistrictId( int id)
        {
            Salesmen = await _salesmenService.GetSalesmanReponsibilityByDistrictIdAsync(id);
        }
    
        public List<Salesman> Salesmen {
            get { return _salesman; }
            set {
                _salesman = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Salesmen"));
            }
        }
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int IsResponsible { get; set; }
public int IsSecondary { get; set; }
我想要实现的是检查“IsResponsible”属性值等于1的行中的radiobutton。一次只能检查一个单选按钮。我通过添加“GroupName”实现了这一点。
此外,如果IsSecondary属性值等于1,则应在“IsSecondary”列中选中该复选框。可以同时选中多个复选框。

您有一个常规类型不匹配问题
IsChecked
通常是一个
bool
值,但只有
int
值可用

有两种方法可以解决这个问题:

  • 您可以在
    GetSalesManResponsibility ByDistrictionIDAsync
    中将
    IsResponsible
    IsSecondary
    的类型更改为
    bool
  • 您可以添加另一个要绑定的属性,在
    Get
    操作中将
    IsResponsible
    IsSecondary
    的值内部转换为
    bool
  • 使用以下任一建议,您可以将给定值绑定到WPF中的
    IsChecked
    ,如: