【问题标题】:Binding for ListboxItems not updated未更新 ListboxItems 的绑定
【发布时间】:2012-07-23 15:01:58
【问题描述】:

我有一个与项目付款数据绑定的列表框。当我添加新的付款时,付款将被添加到列表中。添加页面还用于编辑付款。该事件被调用,在调试模式下我可以看到我的付款的更改值,但 ListBoxItem 不会被更新。在添加页面的末尾会调用一个事件,该事件会更新列表框项:

GlobalNotifier.OnPaymentAdded();

OnPaymentAdded 调用一个只通知属性变化的方法:

OnNotifyPropertyChanged("Project");

列表框的代码:

<ListBox Name="ListPayments" ItemsSource="{Binding Project.Payments}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Margin="10,5,10,0">
                <StackPanel>
                    <TextBlock FontSize="30" Text="{Binding Name}" />
                </StackPanel>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

为什么添加了新项目,但没有更新现有项目?有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    发生的情况是,虽然 Project-object 已更新,但 Payments 对象(可能是 List)并未更新。

    可以尝试以下方法:

    1. 每当List-object 被操作(编辑、删除/添加项目)时,为Projects 触发PropertyChanged-event
    2. 您还可以将List&lt;Project&gt; 切换为ObservableCollection&lt;Project&gt;,这肯定会解决您的问题
    3. 如果您无法切换到ObservableCollection,请在显示列表的视图中覆盖OnNavigatedTo(),然后从那里调用PropertyChanged-events(项目、付款等)。

    其中任何一个都可以解决您的问题 - 这完全取决于品味和偏好。

    【讨论】:

    • 付款属于 ICollection 类型。将 Payments 切换到 ObservableCollection 解决了这个问题。谢谢!
    【解决方案2】:

    听起来您的项目属性不是依赖属性,或者没有人为它们触发 propertychanged。

    【讨论】:

    • 我在 OnNotifyPropertyChanged 上有一个断点,它在添加和编辑时被调用。但项目没有更新。我还尝试使用自己的属性 Payment 作为指向 Project.Payments 的 ItemsSource,但没有任何改变。 依赖属性是什么意思?
    • 依赖属性是依赖于其他变量或一般对象的属性。有很多关于这些属性的好文章,谷歌将成为你的朋友。
    • 你能发布你的项目类的来源吗?
    猜你喜欢
    • 2011-03-28
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多