1

我有一个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>
4

2 回答 2

1

不要那样做。相反,让 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。

于 2013-07-09T11:39:59.347 回答
1

可能动态绑定某些名称可以通过 完成Binding,如下所示:

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

引用MSDN

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

简而言之,Binding用于控件的 Name 属性是不可能且不可取的。但是您可以使用附加的依赖属性,如下所示:

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

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

于 2013-07-09T11:54:58.210 回答