gpt4 book ai didi

c# - 如何刷新 SilverLight 3 项目中的 ListBox.ItemsSource?

转载 作者:行者123 更新时间:2023-11-30 15:48:49 26 4
gpt4 key购买 nike

我的 XAML,我定义了一个 ListBox

<ListBox x:Name="lstStatus" Height="500" 
Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="3" VerticalAlignment="Top" Margin="2, 2, 2, 2">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image />
<TextBlock Width="70" Text="{Binding FriendlyID}" />
<TextBlock Width="150" Text="{Binding StatusName}" />
<TextBlock Width="70" Text="{Binding ANI}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.Effect>
<DropShadowEffect/>
</ListBox.Effect>
</ListBox>

在代码隐藏中,我定义了一个模块级 ObservableCollection 设备。

private ObservableCollection<Device> devices = new ObservableCollection<Device>();

在 OnNavigatedTo 事件中,我将集合绑定(bind)到列表框

lstStatus.ItemsSource = devices;

集合很可能不会增长或缩小,但其中的对象一直在变化。无论出于何种原因,当我执行以下代码时,列表都不会更新:

Device selectedDevice = null;
foreach (Device dv in devices)
{
if (dv.IsTrunk)
{
selectedDevice = dv;
break;
}
}

if (selectedDevice != null)
selectedDevice.StatusName = DateTime.Now.ToString();
else
throw new Exception();

事实上,我能够让它正常工作的唯一方法是伪造它,从列表中删除项目,然后再将其添加回去。显然不是长期的解决方案。

我错过了什么?

最佳答案

听起来您在 Device 对象中缺少 INotifyPropertyChanged 实现。

例如:-

 public class Device : INotifyPropertyChanged
{
private string _StatusName;
public string StatusName
{
get { return _StatusName; }
set
{
_StatusName = value;
NotifyPropertyChanged("StatusName");
}

}

private void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

#endregion
}

这将使绑定(bind)到特定属性的 TextBlocks 在属性更改时得到通知。

关于c# - 如何刷新 SilverLight 3 项目中的 ListBox.ItemsSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2246382/

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