Windows 应用商店应用中没有技术要求来根据控件的属性来区分控件。是否需要关联currentItem
到复选框取决于事件处理程序的作用。如果您需要对其相关的东西做某事currentItem
,您将需要一种从事件处理程序访问它的方法。将其设置为Tag
控件使这很容易:
public delegate void TappedEventHandler(object sender, TappedRoutedEventArgs e)
{
var item = (int)((CheckBox)sender).Tag;
// do something with the value
}
不过,我不喜欢以这种方式动态地创建控件。大多数情况下,使用数据绑定更容易实现相同的结果。在您的情况下,您需要以下 XAML:
<ItemsControl ItemsSource="{Binding Groups}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked, Mode=TwoWay}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
从DataContext
您的页面开始,您在视图模型中需要以下内容:
public class ViewModel
{
public List<Group> Groups { get; set; }
}
public class Group
{
private bool _isChecked;
public int Id { get; set; }
public string Name { get; set; }
public bool IsChecked
{
get { return _isChecked; }
set
{
if (_isChecked != value)
{
_isChecked = value;
// react to value change if necessary
}
}
}
}
CheckBox
state 现在将自动反映在相应的Group
实例中。IsChecked
如有必要,您可以在 setter 中调用其他代码。