Wpf 如何强制ListBox重新加载ListBoxItems的属性
有没有办法,如何强制ObservableCollection对FireCollection进行更改 我有一个对象的ObservableCollectionWpf 如何强制ListBox重新加载ListBoxItems的属性,wpf,data-binding,listbox,Wpf,Data Binding,Listbox,有没有办法,如何强制ObservableCollection对FireCollection进行更改 我有一个对象的ObservableCollectionListBoxitem source,因此每次我向集合添加/删除项时,ListBox都会相应地更改,但当我更改集合中某些对象的属性时,ListBox仍会呈现旧值 即使我确实修改了一些属性,然后向集合中添加/删除对象,也不会发生任何事情,我仍然会看到旧值 还有别的办法吗?我发现接口INotifyPropertyChanged,但我不知道如何使用它
ListBox
item source,因此每次我向集合添加/删除项时,ListBox都会相应地更改,但当我更改集合中某些对象的属性时,ListBox仍会呈现旧值
即使我确实修改了一些属性,然后向集合中添加/删除对象,也不会发生任何事情,我仍然会看到旧值
还有别的办法吗?我发现接口INotifyPropertyChanged,但我不知道如何使用它。修改集合中项目的属性不会触发集合本身的NotifyCollectionChanged-毕竟它没有更改集合
InotifyProperty已更改,您走在正确的轨道上。您需要在列表包含的类上实现该接口。因此,如果您的集合是“ObservableCollection”,请确保您的Foo类实现了INotifyPropertyChanged。我同意Matt上面的评论。下面是一小段代码,演示如何实现INotifyPropertyChanged =============
代码隐藏
=============
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Data;
using System.Windows.Documents;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
Nicknames names;
public Window1()
{
InitializeComponent();
this.addButton.Click += addButton_Click;
this.names = new Nicknames();
dockPanel.DataContext = this.names;
}
void addButton_Click(object sender, RoutedEventArgs e)
{
this.names.Add(new Nickname(myName.Text, myNick.Text));
}
}
public class Nicknames : System.Collections.ObjectModel.ObservableCollection<Nickname> { }
public class Nickname : System.ComponentModel.INotifyPropertyChanged
{
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
void Notify(string propName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propName));
}
}
string name;
public string Name
{
get { return name; }
set
{
name = value;
Notify("Name");
}
}
string nick;
public string Nick
{
get { return nick; }
set
{
nick = value;
Notify("Nick");
}
}
public Nickname() : this("name", "nick") { }
public Nickname(string name, string nick)
{
this.name = name;
this.nick = nick;
}
public override string ToString()
{
return Name.ToString() + " " + Nick.ToString();
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Windows;
使用System.Windows.Data;
使用System.Windows.Documents;
命名空间WpfApplication1
{
///
///Window1.xaml的交互逻辑
///
公共部分类Window1:Window
{
昵称;
公共窗口1()
{
初始化组件();
this.addButton.Click+=addButton\u Click;
this.names=新昵称();
dockPanel.DataContext=this.names;
}
void addButton\u单击(对象发送器,路由目标)
{
this.names.Add(新昵称(myName.Text,myNick.Text));
}
}
公共类昵称:System.Collections.ObjectModel.ObservableCollection{}
公共类昵称:System.ComponentModel.INotifyPropertyChanged
{
公共事件System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
无效通知(字符串名称)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的System.ComponentModel.PropertyChangedEventArgs(propName));
}
}
字符串名;
公共字符串名
{
获取{返回名称;}
设置
{
名称=值;
通知(“名称”);
}
}
线痕;
公共字符串尼克
{
获取{return nick;}
设置
{
尼克=价值;
通知(“尼克”);
}
}
公共昵称():此(“名称”、“尼克”){}
公共昵称(字符串名称、字符串昵称)
{
this.name=名称;
this.nick=nick;
}
公共重写字符串ToString()
{
返回Name.ToString()+“”+Nick.ToString();
}
}
}
XAML<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<DockPanel x:Name="dockPanel">
<TextBlock DockPanel.Dock="Top">
<TextBlock VerticalAlignment="Center">Name: </TextBlock>
<TextBox Text="{Binding Path=Name}" Name="myName" />
<TextBlock VerticalAlignment="Center">Nick: </TextBlock>
<TextBox Text="{Binding Path=Nick}" Name="myNick" />
</TextBlock>
<Button DockPanel.Dock="Bottom" x:Name="addButton">Add</Button>
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" />
</DockPanel>
</Grid>
姓名:
尼克:
添加