【问题标题】:Name checkboxes in ListViewListView 中的名称复选框
【发布时间】:2013-07-06 23:44:00
【问题描述】:

我有一个ListView 控件,其中包含一列仅带有复选框。是否可以给这些复选框一些名称(索引 - 如 1、2、3...)?

我需要它,因为我想以某种方式在 ToggleButton_OnCheckedUnchecked 事件中识别一个具体的复选框。

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <CheckBox IsChecked="{Binding Value, Mode=OneWay}" IsThreeState="False"
                  Checked="ToggleButton_OnCheckedUnchecked"
                  Unchecked="ToggleButton_OnCheckedUnchecked"/>
    </DataTemplate>
</GridViewColumn.CellTemplate>

【问题讨论】:

  • 你想给dynamically命名?
  • 为什么在绑定值时需要该复选框。使用 Value 解决以遵循 MVVM。如果你是这样。 ?

标签: c# .net wpf listview binding


【解决方案1】:

可能动态绑定一些名字可以通过Binding完成,像这样:

<CheckBox Name="{Binding IdCheckBox}" ... />

引用自MSDN

数据绑定名称在技术上是可行的,但这种情况极为罕见,因为数据绑定名称不能满足该属性的主要预期目的:为代码隐藏提供标识符连接点。

简而言之,用于控制的Binding Name 属性是不可能且不可取的。但是你可以使用附加的依赖属性,像这样:

<CheckBox local:GiveName.Name="{Binding Template_Name1}" ... />

无论如何,这不是解决您问题的方法。

【讨论】:

    【解决方案2】:

    不要那样做。相反,让 ListView 中的每一行都有一个 IsChecked 属性,并将 IsChecked Binding 更改为 TwoWay。这样,您根本不需要使用 Checked 和 UnChecked 事件。

    public class LineViewModel
    {
       public bool IsChecked
       {
         get { return _isChecked;
       }
       set
       {
       // do something here
       }
    }
    
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}" IsThreeState="False"/>
        </DataTemplate>
    </GridViewColumn.CellTemplate>
    

    为了获得最佳结果,也请实施 INotifyPropertyChanged。

    【讨论】:

    • 编程太多...我为自己感到羞耻:D Thx!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2023-04-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多