【问题标题】:Stray Checkbox Checked and Unchecked Events for Windows Phone 7Windows Phone 7 的杂散复选框选中和未选中事件
【发布时间】:2012-03-19 22:04:57
【问题描述】:

我有一个 ListBox ItemTemplate,其中有一个 CheckBox,它绑定到我在我的应用程序中维护的 List。

我的 XAML:

  <ListBox x:Name ="lstTasks">
         <ListBox.ItemTemplate>
               <DataTemplate>
                   <StackPanel Orientation="Horizontal" Margin="30,12,0,0">
                         <CheckBox IsChecked="{Binding use}" Unchecked="CheckBox_Unchecked" Tag="{Binding key}" Checked="CheckBox_Checked" />
                         <TextBlock Width="160" Text="{Binding key}" Margin="20,18,0,0" />
                         <TextBlock Text="{Binding value}"  Margin="0,18,0,0"/>
                    </StackPanel>
               </DataTemplate>
         </ListBox.ItemTemplate>
  </ListBox>

还有:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    lstTasks.ItemsSource = null;
    lstTasks.ItemsSource = a.Words; //a.Words is the List<DataClass>
}

我观察到,当我滚动这些项目的列表时,Checked 和 Unchecked 事件会自行触发。我对这些事件附加了逻辑,它们通过检查和取消检查随机条目来搞砸整个事情。这在我取消选中其中一项后开始。 (默认所有项目都被选中)

我是 WPF 和 Windows Phone 的新手,我做错了什么?

【问题讨论】:

    标签: silverlight windows-phone-7 data-binding


    【解决方案1】:

    首先,Windows Phone 不使用 WPF。您正在使用基于 WPF 子集的 Silverlight。它们是具有不同功能的不同技术。很多事情你可以在一个上做你不能在另一个上做。

    这将有助于查看更多代码,尤其是视图模型,以全面了解正在发生的事情。

    我怀疑以下两件事之一:
    1 - 基于use 属性的设置在某处存在一些逻辑,并且由于它在 vm 中发生更改,因此它反映在 UI 中并触发事件的事实。
    2 - 您的 ListBox 中有一个虚拟化列表,当项目加载时,它会触发 UI 更新(由于绑定),进而触发事件。

    无法查看更多代码,很难更具体。

    作为此方法的替代方法,您可以使用 use 属性的 2 路绑定,并将逻辑从事件处理程序(用于选中和未选中)移动到属性设置器中。

    【讨论】:

    • 我没有使用过 MVVM 或任何类似的东西。我直接使用 ItemsSources 并将其分配给我的自定义对象。你的观点 2. 正是我正在做的。
    • @ShadowClaw by using Bindings 有一个参数表明您正在使用 MVVM。如果第 2 点是您正在做的事情,那么只需将虚拟化堆栈面板替换为不进行虚拟化的堆栈面板。只有一行 XAML 和代码描述,很难就如何解决您的问题提供具体建议。
    • 我已经把代码。 'CheckBox_Unchecked' 和 'CheckBox_Checked' 是被触发的杂散事件。我猜我的代码中可能违反了很多规则!
    • @ShadowClaw 你把代码放在哪里了?您可能需要对您的场景进行复制以提供直接的进一步建议。
    • 我刚刚编辑了我的帖子以添加完整的 XAML 代码。我只是没有添加事件方法。他们确实改变了我的代码中的 a.Words。这会是个问题吗?你也会看到那些方法吗?他们在滚动列表时被调用,这是问题所在,而不是代码本身。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 2011-10-29
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多