【问题标题】:Checkbox inside Datagrid数据网格内的复选框
【发布时间】:2016-05-30 17:35:58
【问题描述】:

问题


当在 DataGrid 中检查 Checkbox 时,我似乎无法在 ViewModel 中触发方法。

每一行在行内都有一个Checkbox,当Checkbox 被选中/取消选中时,我想在ViewModel 中触发一个方法来更新数据库。

代码


我的 XAML 中有这个 Datagrid

    <DataGrid x:Name="dg_chapters" ItemsSource="{Binding Chapters}" SelectedItem="{Binding Chapter}" SelectionMode="Single" Background="Transparent" BorderBrush="#e5e5e5" CellStyle="{StaticResource episodeDataGridCell}" RowHeaderWidth="0" GridLinesVisibility="None" HorizontalAlignment="Stretch" Grid.Row="4" VerticalAlignment="Stretch" AutoGenerateColumns="False" Grid.RowSpan="1" Grid.Column="1" Grid.ColumnSpan="7">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Description}" CanUserResize="False" ClipboardContentBinding="{x:Null}" Header="Chapter" Width="90"/>
            <DataGridTextColumn Binding="{Binding Appearance}" CanUserResize="False" ClipboardContentBinding="{x:Null}" Header="Player" Width="90"/>
            <DataGridTextColumn Binding="{Binding Channel}" CanUserResize="False" ClipboardContentBinding="{x:Null}" Header="Channel" Width="100"/>
            <DataGridTextColumn Binding="{Binding Mode}" ClipboardContentBinding="{x:Null}" Header="Mode" Width="80"/>
            <DataGridCheckBoxColumn Binding="{Binding Protected}" Header="Protected" Width="80"/>
        </DataGrid.Columns>
    </DataGrid>

您可以在底部看到我的Checkbox 专栏。在我的ViewModel 中,我尝试创建一个命令来处理Checkbox 的选择/取消选择:

    public ICommand Protected
    {
        get { return new DelegateCommand<object>(Protected_Click); }
    }

然后我创建了受保护的方法:

    private void Protected_Click(object obj)
    {
        //DOES NOT HIT.
    }

谁能看到我哪里出了问题以及如何让这个功能发挥作用?

【问题讨论】:

  • 您正在尝试将命令绑定为 CheckBox 值,这是行不通的。来自 MSDN “要填充列,请使用 Binding 属性将列绑定到数据。Binding 属性是应用于列中创建的 CheckBox 元素。" msdn.microsoft.com/en-us/library/…
  • 在你的虚拟机中创建一个属性 IsChecked,将它绑定到 CheckBox.IsCheked,然后在属性设置器中调用你的数据库更新方法
  • @Василий Шапенко 有没有办法可以传递复选框所在的行?
  • @Ben Clarke 您的 ViewModel 应该有足够的信息,row 只是某个模型的表示,您不需要它。只需编写一个带有 IsCheked 属性和虚拟方法 UpdateDb 的基本 ViewModel,您将在子模型中覆盖它。或者将方法 UpdateDb 设为 Func,如果您不想编写太多无用的(从我的角度来看)类
  • @ВасилийШапенко 我已经有了更新数据库的功能,并且我已经成功地添加了当复选框被选中时触发方法的属性。我只是坚持检索行信息。

标签: c# wpf checkbox mvvm datagrid


【解决方案1】:

DataGridTemplateColumn中DataGrid内的复选框

 <DataGrid Name="GatewayDataGrid" Width="auto" Height="auto"> 
     <DataGridTemplateColumn Header="SplitMark" Width="30" >
      <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
      <CheckBox x:Name="Chb" VerticalAlignment="Center" HorizontalAlignment="Center" IsChecked="{Binding IsSelected,UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Click="Chb_Click"  HorizontalContentAlignment="Center" VerticalContentAlignment="Top"></CheckBox>
      </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
      <DataGridTextColumn Header="Name" Binding="{Binding Name}"> </DataGridTextColumn >
      <DataGridTextColumn Header="Department" Binding="{Binding Department}"> </DataGridTextColumn >
    </DataGrid>

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2010-11-24
    • 2020-03-22
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2020-12-16
    • 2011-01-24
    相关资源
    最近更新 更多