【问题标题】:WPF DataGrid Bind Radiobutton Column to PropertyWPF DataGrid 将单选按钮列绑定到属性
【发布时间】:2014-02-03 08:06:25
【问题描述】:

我一直在寻找一段时间,但我似乎无法找到为什么我的 datagrid 单选按钮列(正在生成)无法正常工作。我可以单击单选按钮,但它们不会改变。对于某些背景,我正在制作一个房地产管理程序,这个窗口是“编辑属性”页面。我正在创建一个数据网格,用户可以在其中选择居住在该房产中的租户以及当前(或最新)的租户。

这是我的数据网格的 xaml:

<DataGrid VerticalScrollBarVisibility="Auto" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeRows="False" CanUserAddRows="False" AutoGenerateColumns="False" Margin="5,0,0,0" Width="375" Height="100" ItemsSource="{Binding CurrentProperty.tennants}">
    <DataGrid.Columns>
        <DataGridCheckBoxColumn Header="Lived Here" Binding="{Binding something}"/> <!-- I'm still working on this. This is a totally different problem. I know how to bind. -->
        <DataGridTemplateColumn Header="Current">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton HorizontalAlignment="Center" GroupName="current" IsChecked="{Binding current, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>                        
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="Name" Binding="{Binding name}"/>
    </DataGrid.Columns>
</DataGrid>

目前,数据网格中显示了 5 个租户(这是我想要的),其中一个选择了当前单选按钮(这是我想要的)。我不能,但是选择一个不同的单选按钮。它只是取消选择当前的,直到我再次单击它。

谢谢。我已经为此发疯了一段时间了。

【问题讨论】:

    标签: wpf xaml data-binding datagrid


    【解决方案1】:

    您可能希望为您的数据模板添加数据触发器 -

    <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}" Value="True">
         <Setter TargetName="current" Property="IsChecked" Value="True"/>
     </DataTrigger>
    </DataTemplate.Triggers>
    

    PS : 这只是一个变通方法。

    【讨论】:

      【解决方案2】:

      @Ethan,当您的 .NET 程序出现问题时,第一步应该是转到搜索引擎并输入 A B,其中 A 是 UI 元素的名称,@987654326 @ 是它所属的成员类型的名称。在您的情况下,您需要搜索 DataGridCheckBoxColumn class。如果你这样做了,你就会马上发现你的问题是什么......这是你的DataGridCheckBoxColumn

      <DataGridCheckBoxColumn Header="Lived Here"/>
      

      这是链接页面中的示例:

      <DataGridCheckBoxColumn Header="Online Order?" IsThreeState="True" Binding="{Binding 
          OnlineOrderFlag}" />
      

      马上,我们可以看到您没有设置DataGridCheckBoxColumn.Binding 属性。如果我们查看页面上的属性,我们可以看到Binding 属性

      获取或设置将列与数据源中的属性相关联的绑定。

      因此,您没有将 DataGridCheckBoxColumn 与数据绑定项中的任何属性相关联,就像您在其他列中所做的那样:

      <DataGridTextColumn Header="Name" Binding="{Binding name}"/>
      

      在列上设置适当的Binding 后,您应该看到这一切都按预期工作。


      从帮助中心的How do I ask a good question? 页面可以清楚地看出,您应该在此处发布问题之前彻底搜索,以防止发布容易解决的问题。请在以后这样做。


      更新>>>

      @Ethan,我误读了您的问题并接受您可能确实做了一些研究,为此,我深表歉意。但是,我想知道您是否可以概述我的回答中描述您有多愚蠢的部分?作为site moderators 的一员,我有责任向新会员和初级会员解释本网站的运作方式。

      这个有用的建议通常会受到大多数用户的欢迎和感谢,所以我真的不明白你为什么持如此负面的看法......毕竟,我是唯一的人费心尝试首先回答你的问题。

      关于您最后的评论,请不要为我编辑您的问题...自己编辑...您的问题越好,它会受到越多的关注。

      如果您现在已经冷静下来,也许我可以解决您的实际问题?我已将您的 XAML 复制到一个带有一些虚拟数据的新项目中,但我不敢说该代码存在 no 问题。您的问题一定出在其他地方,可能是在更改数据的属性设置器中,或者类似的东西。

      现在,我将尝试在这里给您更多建议,但这绝不意味着我认为您很愚蠢...当您在此处添加问题并提供代码时,建议您确保您的代码示例实际上展示了您的问题。我经常发现,在简化问题以在此处的问题中描述时,我会在此过程中找到解决方案。

      【讨论】:

      • 我做到了。我不想要一个复选框。我想要一个单选按钮。请在发布描述我不做研究有多愚蠢的答案之前正确阅读该问题。请在未来这样做。谢谢。
      • 问题是关于模板单选按钮列。不是这个:&lt;DataGridCheckBoxColumn Header="Lived Here"/&gt;。我知道那还不完整。不过,为了您的利益,我会编辑问题。
      • 很抱歉去年的评论太糟糕了。我刚刚回到这个问题,因为它有 1000 多个视图。我一定是心情非常不好。感谢您提供的帮助。
      猜你喜欢
      • 1970-01-01
      • 2012-03-02
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2013-02-28
      • 2021-04-11
      相关资源
      最近更新 更多