2013-07-09 32 views
1

我有一个ListView控件,该控件仅包含一个仅包含复选框的列。是否有可能给这些复选框一些名称(索引 - 像1,2,3 ...)?ListView中的名称复选框

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

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

你想给'动态'命名? –

+0

是的,正好:) – Nickon

+1

为什么你需要复选框,而你有价值绑定。请使用Value解决MVVM问题。如果你是这样。 ? – JSJ

回答

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。

+0

编程太多......我为自己感到羞愧:D Thx! – Nickon

1

也许动态绑定一些名字可以通过Binding来完成,这样的:

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

报价从MSDN

数据绑定的名称,在技术上是可行的,但是是一个非常罕见因为数据绑定的名称不能用于该属性的主要预期用途:为代码隐藏提供标识符连接点。

总之,用于控制的Binding名称属性是不可能的和不希望的。但是你可以使用附加的依赖属性,像这样:

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

在任何情况下,这不是解决你的问题。