gpt4 book ai didi

Silverlight 3 数据绑定(bind)子属性不更新

转载 作者:行者123 更新时间:2023-12-04 02:44:37 26 4
gpt4 key购买 nike

我有一个 Silverlight 控件,它以我的根 ViewModel 对象作为它的数据源。 ViewModel 公开了一个 Card 列表以及一个 SelectedCard 属性,该属性绑定(bind)到 View 顶部的下拉列表。然后,我在底部有一个排序形式,显示 SelectedCard 的属性。我的 XAML 显示为(为简单起见减少了):

<StackPanel Orientation="Vertical">
<ComboBox DisplayMemberPath="Name"
ItemsSource="{Binding Path=Cards}"
SelectedItem="{Binding Path=SelectedCard, Mode=TwoWay}"
/>
<TextBlock Text="{Binding Path=SelectedCard.Name}"
/>
<ListBox DisplayMemberPath="Name"
ItemsSource="{Binding Path=SelectedCard.PendingTransactions}"
/>
</StackPanel>

每当我在 ComboBox 中选择一个新项目时,我希望 TextBlock 和 ListBox 会更新,但事实并非如此。我确定这与 TextBlock 和 ListBox 实际上绑定(bind)到 SelectedCard 的属性这一事实有关,因此它正在监听该对象上的属性的属性更改通知。但是,我会认为数据绑定(bind)足够聪明,可以识别绑定(bind)表达式中的父对象已更改并更新整个绑定(bind)。

值得注意的是,PendingTransactions 属性(绑定(bind)到 ListBox)是延迟加载的。因此,当我第一次在 ComboBox 中选择一个项目时,我会进行异步调用并加载列表,并且 UI 会更新以显示与所选项目相对应的信息。但是,当我重新选择一个项目时,用户界面不会改变!

例如,如果我的原始列表包含三张卡片,我默认选择第一张卡片。数据绑定(bind)确实会尝试访问该 Card 对象上的 PendingTransactions 属性并正确更新 ListBox。如果我选择列表中的第二张卡片,也会发生同样的事情,并且我会显示该卡片的 PendingTransactions 列表。但是,如果我再次选择第一张卡片,我的 UI 没有任何变化!设置断点,我能够确认 SelectedCard 属性正在正确更新。

我怎样才能使这项工作?

最佳答案

如果您使用的是 Silverlight 3,则需要使用 INotifyPropertyChanged。

例子:

public class CardViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<Card> Cards { get; set; }
private Card _selectedCard;
public SelectedCard
{
get
{
return _selectedCard;
}
set
{
if (value != _selectedCard)
{
_selectedCard = value;
NotifyPropertyChanged("SelectedCard");
}
}
}
public CardViewModel()
{
Cards = new ObservableCollection<Card>();
//Populate Cards collection with objects
}
public void NotifyPropertyChanged(string item)
{
if (PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(item));
}
}
}

您需要做的就是将此类设置为您的 View DataContext ,一切都应该是愉快的。

关于Silverlight 3 数据绑定(bind)子属性不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2668471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com