C# WPF更新列表框数据绑定
我是WPF新手,正在从xml文件数据绑定Listbox,程序启动时所有内容都会正确加载,但是在插入新记录后,我很难更新Listbox。我读到的所有内容都指向使用一个ObservableCollection,但我不知道如何让列表框刷新。我尝试调用ItemsSource的更新,但它似乎仍然不起作用。理想情况下,我只希望有一个刷新按钮,用户可以点击它来更新列表框。有人对调用列表框的更新有什么建议吗 谢谢你,迈克尔C# WPF更新列表框数据绑定,c#,wpf,xaml,data-binding,listbox,C#,Wpf,Xaml,Data Binding,Listbox,我是WPF新手,正在从xml文件数据绑定Listbox,程序启动时所有内容都会正确加载,但是在插入新记录后,我很难更新Listbox。我读到的所有内容都指向使用一个ObservableCollection,但我不知道如何让列表框刷新。我尝试调用ItemsSource的更新,但它似乎仍然不起作用。理想情况下,我只希望有一个刷新按钮,用户可以点击它来更新列表框。有人对调用列表框的更新有什么建议吗 谢谢你,迈克尔 public class ContactList { string conta
public class ContactList
{
string contactFile = @"U:\Peridot\Users\" + Program.getUser.ToString() + ".xml";
public ContactList()
{
}
public ContactList(string contactFullName, string contactCellNumber,string contactBusinessNumber, string contactExtension, string contactEmail, string contactStatus,string contactAuralinkStatus, string contactAuralinkID)
{
this.ContactFullName = contactFullName;
this.ContactCellNumber = contactCellNumber;
this.ContactBusinessNumber = contactBusinessNumber;
this.ContactExtension = contactExtension;
this.ContactEmail = contactEmail;
this.ContactStatus = contactStatus;
this.ContactAuralinkStatus = contactAuralinkStatus;
this.ContactAuralinkID = contactAuralinkID;
}
private string ContactFullName;
public string PropContactFullName
{
get { return ContactFullName; }
set { ContactFullName = value; }
}
private string ContactCellNumber;
public string PropContactCellNumber
{
get { return ContactCellNumber; }
set { ContactCellNumber = value; }
}
private string ContactBusinessNumber;
public string PropContactBusinessNumber
{
get { return ContactBusinessNumber; }
set { ContactBusinessNumber = value; }
}
private string ContactEmail;
public string PropContactEmail
{
get { return ContactEmail; }
set { ContactEmail = value; }
}
private string ContactStatus;
public string PropContactStatus
{
get { return ContactStatus; }
set { ContactStatus = value; }
}
private string ContactAuralinkStatus;
public string PropContactAuralinkStatus
{
get { return ContactAuralinkStatus; }
set { ContactAuralinkStatus = value; }
}
public string ContactAuralinkID;
public string PropContactAuralinkID
{
get { return ContactAuralinkID; }
set { ContactAuralinkID = value; }
}
private string ContactExtension;
public string PropContactExtension
{
get { return ContactExtension; }
set { ContactExtension = value; }
}
}
public class Contacts : System.Collections.ObjectModel.ObservableCollection<ContactList>
{
string contactFile = @"U:\Peridot\Users\" + Program.getUser.ToString() + ".xml";
//Added this
public event NotifyCollectionChangedEventHandler CollectionChanged;
protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
if (CollectionChanged != null)
{
CollectionChanged(this, e);
}
}
public Contacts(): base()
{
getContactFile();
XDocument doc = XDocument.Load(contactFile);
var contacts = from r in doc.Descendants("Contact")
select new
{
FullName = r.Element("FullName").Value,
CellNumber = r.Element("CellNumber").Value,
BusinessNumber = r.Element("BusinessNumber").Value,
Extension = r.Element("Extension").Value,
Email = r.Element("Email").Value,
AuralinkID = r.Element("AuralinkID").Value
};
foreach (var r in contacts)
{
Add(new ContactList(r.FullName,r.CellNumber , r.BusinessNumber,r.Extension, r.Email, "", "",r.AuralinkID));
}
}
private void getContactFile()
{
if (!File.Exists(contactFile))
{
new XDocument(
new XElement("Contacts"
)
)
.Save(contactFile);
}
}
}
private void addContactICON_MouseDown(object sender, MouseButtonEventArgs e)
{
if (!doesContactExist())
{
try
{
XDocument doc = XDocument.Load(@"U:\Peridot\Users\" + Program.getUser.ToString() + ".xml");
XElement contact = new XElement("Contact");
contact.Add(new XElement("ContactID", contactID.ToString()));
contact.Add(new XElement("FullName", contactNameLBL.Content.ToString()));
contact.Add(new XElement("CellNumber", c1.Content.ToString()));
contact.Add(new XElement("BusinessNumber", businessPhoneIcon.ToolTip.ToString()));
contact.Add(new XElement("Extension", c3.Content.ToString()));
contact.Add(new XElement("Email", emailIcon.ToolTip.ToString()));
contact.Add(new XElement("AuralinkID", videoIcon.ToolTip.ToString()));
doc.Element("Contacts").Add(contact);
doc.Save(@"U:\Peridot\Users\" + Program.getUser.ToString() + ".xml");
MessageBox.Show(contactNameLBL.Content.ToString() + " has been added to your contacts.");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
else
MessageBox.Show("Contact Already Exists");
}
公共类联系人列表
{
字符串contactFile=@“U:\Peridot\Users\”+Program.getUser.ToString()+“.xml”;
公共联系人列表()
{
}
公共联系人列表(字符串contactFullName、字符串contactCellNumber、字符串contactBusinessNumber、字符串contactExtension、字符串contactEmail、字符串contactStatus、字符串contactAuralinkStatus、字符串contactAuralinkID)
{
this.ContactFullName=ContactFullName;
this.ContactCellNumber=ContactCellNumber;
this.ContactBusinessNumber=ContactBusinessNumber;
this.ContactExtension=ContactExtension;
this.ContactEmail=ContactEmail;
this.ContactStatus=ContactStatus;
this.ContactAuralinkStatus=ContactAuralinkStatus;
this.ContactAuralinkID=ContactAuralinkID;
}
私有字符串ContactFullName;
公共字符串PropContactFullName
{
获取{return ContactFullName;}
设置{ContactFullName=value;}
}
私有字符串ContactCellNumber;
公共字符串PropContactCellNumber
{
获取{返回ContactCellNumber;}
设置{ContactCellNumber=value;}
}
私有字符串ContactBusinessNumber;
公共字符串PropContactBusinessNumber
{
获取{return ContactBusinessNumber;}
设置{ContactBusinessNumber=value;}
}
私人字符串联系人电子邮件;
公共字符串PropContactEmail
{
获取{return ContactEmail;}
设置{ContactEmail=value;}
}
私有字符串状态;
公共字符串状态
{
获取{return ContactStatus;}
设置{ContactStatus=value;}
}
私有字符串状态;
公共字符串PropContactAuralinkStatus
{
获取{return ContactAuralinkStatus;}
设置{ContactAuralinkStatus=value;}
}
公共字符串ContactAuralinkID;
公共字符串PropContactAuralinkID
{
获取{return ContactAuralinkID;}
设置{ContactAuralinkID=value;}
}
私有字符串扩展;
公共字符串扩展名
{
获取{return ContactExtension;}
设置{ContactExtension=value;}
}
}
公共类联系人:System.Collections.ObjectModel.ObservableCollection
{
字符串contactFile=@“U:\Peridot\Users\”+Program.getUser.ToString()+“.xml”;
//加上这个
公共事件通知CollectionChangedEventHandler CollectionChanged;
CollectionChanged上受保护的虚拟空间(NotifyCollectionChangedEventArgs e)
{
如果(CollectionChanged!=null)
{
集合更改(本,e);
}
}
公共联系人():base()
{
getContactFile();
XDocument doc=XDocument.Load(contactFile);
var contacts=来自文档子体中的r(“Contact”)
选择新的
{
FullName=r.Element(“FullName”).Value,
CellNumber=r.元素(“CellNumber”).值,
BusinessNumber=r.Element(“BusinessNumber”).Value,
扩展=r.元素(“扩展”).值,
Email=r.Element(“Email”).值,
AuralinkID=r.Element(“AuralinkID”).Value
};
foreach(触点中的var)
{
添加(新联系人列表(r.FullName、r.CellNumber、r.BusinessNumber、r.Extension、r.Email、“、”、r.AuralinkID));
}
}
私有void getContactFile()
{
如果(!File.Exists(contactFile))
{
新XDocument(
新XElement(“联系人”
)
)
.Save(contactFile);
}
}
}
私有void addContactICON_MouseDown(对象发送器,鼠标按钮ventargs e)
{
如果(!doesContactExist())
{
尝试
{
XDocument doc=XDocument.Load(@“U:\Peridot\Users\”+Program.getUser.ToString()+”.xml”);
XElement触点=新XElement(“触点”);
contact.Add(新的XElement(“ContactID”,ContactID.ToString());
Add(新的XElement(“FullName”,contactNameLBL.Content.ToString());
contact.Add(新的XElement(“CellNumber”,c1.Content.ToString());
Add(新的XElement(“BusinessNumber”,businessPhoneIcon.ToolTip.ToString());
Add(新的XElement(“扩展名”,c3.Content.ToString());
添加(新的XElement(“Email”,emailIcon.ToolTip.ToString());
添加(新的XElement(“AuralinkID”,videoIcon.ToolTip.ToString());
文件元素(“联系人”)。添加(联系人);
doc.Save(@“U:\Peridot\Users\”+Program.getUser.ToString()+“.xml”);
MessageBox.Show(contactNameLBL.Content.ToString()+“已添加到您的联系人中”);
}
捕获(例外情况除外)
{
Show(例如ToString());
}
}
其他的
MessageBox.Show(“联系人已存在”);
}
XAML
<StackPanel>
<StackPanel.Resources>
<local:Contacts x:Key="contactListobj"></local:Contacts>
</StackPanel.Resources>
<ListBox x:Name="contactList" Width="305" Margin="5,3,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" ItemsSource="{Binding Source={StaticResource contactListobj}}" Height="450" IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" >
<TextBlock Text="{Binding PropContactFullName}" ToolTip="{Binding PropContactFullName}" Height="35" Width="175" FontSize="12"/>
<TextBlock x:Name="contactEmailLBL" Text="{Binding PropContactEmail}" ToolTip="{Binding PropContactEmail}" Cursor="Hand" Width="30" Height="35" MouseLeftButtonUp="contactEmailLBL_MouseLeftButtonUp" Foreground="{x:Null}" FontSize="1">
<TextBlock.Background>
<ImageBrush Stretch="Uniform" ImageSource="Images/emailICON.png"/>
</TextBlock.Background>
</TextBlock>
<TextBlock x:Name="cellNumberLBL" Text="{Binding PropContactCellNumber}" ToolTip="{Binding PropContactCellNumber}" Cursor="Hand" MouseLeftButtonUp="cellNumberLBL_MouseLeftButtonUp" Width="30" Height="35" Foreground="{x:Null}" FontSize="1">
<TextBlock.Background>
<ImageBrush Stretch="Uniform" ImageSource="Images/mobilePhoneICON.png"/>
</TextBlock.Background>
</TextBlock>
<TextBlock x:Name="businessNumberLBL" Text="{Binding PropContactBusinessNumber}" ToolTip="{Binding PropContactBusinessNumber}" Cursor="Hand" Width="30" Height="35" MouseLeftButtonUp="businessNumberLBL_MouseLeftButtonUp" Foreground="{x:Null}" FontSize="1">
<TextBlock.Background>
<ImageBrush Stretch="Uniform" ImageSource="Images/BusinessPhoneICON.png"/>
</TextBlock.Background>
</TextBlock>
<TextBlock x:Name="auralinkLBL" Text="{Binding PropContactAuralinkID}" ToolTip="{Binding PropContactAuralinkID}" Cursor="Hand" Width="30" Height="35" Foreground="{x:Null}" FontSize="1" MouseLeftButtonUp="auralinkLBL_MouseLeftButtonUp">
<TextBlock.Background>
<ImageBrush Stretch="Uniform" ImageSource="Images/VideoICON.png"/>
</TextBlock.Background>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>