Silverlight ListBox复选框选定项

Nat*_*ate 2 .net silverlight user-interface xaml

我有一个Listbox,它有一个Checkbox作为项目模板的一部分.

在单击复选框的单击,我想确保选择相同的列表项.

ListBoxItem lbi = ((ListBoxItem)listLayers.
                       ContainerFromElement((CheckBox)sender));
lbi.IsSelected = true;
Run Code Online (Sandbox Code Playgroud)

我遇到的主要问题是Silverlight中没有"ContainerFromElement".

任何帮助是极大的赞赏.

编辑

这是我在列表中的复选框的click事件中运行的代码:

MyObject obj = listLayers.SelectedItem as MyObject;
obj.Visible = true;
obj.Value = "50";
Run Code Online (Sandbox Code Playgroud)

使用复选框上的RelativeSource绑定以及此代码,我最终得到的obj等于null.

我有一个层列表,我想通过复选框打开和关闭,我对另一种方式开放...

Sor*_*oot 5

在selectionChanged事件中,您必须"遍历"可视树以找到该复选框.您可以使用VisualTreeHelper执行此操作

此示例显示了进入复选框需要执行的操作.

以下是此问题的其他一些解决方案

您应该在ListboxItem和CheckBox之间使用RelativeSource绑定.datatemple包含一个复选框.将其更改为如下所示.

<CheckBox 
  IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, 
    Path=IsSelected, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)

这将在ListBox 的IsSelected属性和CheckBox 的IsChecked属性之间创建绑定. 教程通过示例说明了如何使用.

如果您需要更多控制,您应该查看行为和触发器.他们有点复杂,但给你更多的控制权.