我正在创建一个Windows Phonw 8.1应用程序。我有一个ListBox,我想在运行时附加/插入其他单击按钮。但它不起作用或崩溃。
我的页面构造函数我有这个:
myData = new List<Stuff>() {
new Stuff(){Name="AAA"},
new Stuff(){Name="BBB"},
new Stuff(){Name="CCC"},
new Stuff(){Name="DDD"},
};
myListBox.DataContext = myData;
我的页面是xaml:
<ListBox x:Name="myListBox" ItemsSource="{Binding}" Background="Transparent">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" FontSize="20" Foreground="Red"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
好的,这项工作很好,当我启动应用程序时,我可以看到包含4个项目的列表。
private void Button_Tapped(object sender, TappedRoutedEventArgs e)
{
myData.Add(new Stuff() { Name = String.Format("Added item #{0}", myData.Count) });
//I tried to set the DataContext again, but it does nothing
myListBox.DataContext = mydata;
//I tried to tell the the list to redraw itself, in winform, the Invalidate() method usually get the job done, so I tried both
myListBox.InvalidateMeasure()
//and / or
myListBox.InvalidateArrange();
//or
myListBox.UpdateLayout();
//I tried
myListBox.Items.Add("Some text");
//or
myListBox.Items.Add(new TextBlock(){Text="Some text"});
//or
(myListBox.ItemsSource as List<Stuff>).Add(new Stuff(){Name="Please work..."});
}
可以发生的最好的事情就是抛出异常:
An exception of type 'System.Exception' occurred in mscorlib.ni.dll but was not handled in user code
Additional information: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
我也使用了ListView,但没有任何改变。奖金问题:ListBox和ListView有什么区别?
谷歌并没有真正帮助,我找到的东西可能是旧版Windows Phone或普通WPF或ASP.Net ......
另外,一个奇怪的事情发生在将一个项目添加到列表后没有任何反应,当我点击一个旧项目时,我遇到了灾难性的失败。我的列表项目上还没有活动。
我即将放弃数据绑定,只需逐个代码构建我的应用程序。将内容添加到列表中应该不难,我做错了什么?
答案 0 :(得分:0)
需要使用INotifyPropertyChanged
接口实现某些功能,您可以自己动手,也可以使用内置它的类。
MSDN INotifyPropertyChanged Interface
尝试
using System.ComponentModel;
using System.Collections.ObjectModel;
public class Stuff
{
public Stuff(string name)
{
this.Name = name;
}
public string Name { get; set; }
}
ObservableCollection<Stuff> myData = new ObservableCollection<Stuff>();
myData.Add(new Stuff("abcd"));