jjc*_*jcm 1 c# silverlight xaml datatemplate windows-phone-7
嘿所有,我正在用Silverlight编写一个Windows Phone应用程序,我正在尝试动态更新我已经拥有的DataTemplate的源代码.这是我的xaml:
<ListBox Grid.Row="1" Height="607" HorizontalAlignment="Left" Name="listBox1" VerticalAlignment="Top" Width="480">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="132">
<StackPanel Width="370">
<TextBlock Text="{Binding Transcription}" Foreground="#FFC8AB14" FontSize="28" />
<TextBlock Text="{Binding Duration}" TextWrapping="Wrap" FontSize="24" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
在它后面的C#中,我在主init函数中传递数据,如下所示:
list.Add(new NoteToSelf { Transcription = "oh hi", Duration = "9001 seconds" });
list.Add(new NoteToSelf { Transcription = "fgsfds", Duration = "$Texas seconds" });
listBox1.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)
列表是List集合.所有这一切都很有效 - 硬编码数据在屏幕上按预期显示.但是,当我尝试动态更新信息时,它会无声地失败.如果我将操作绑定到运行此代码的按钮:
list.Add(new NoteToSelf { Transcription = "FFUUUUUUUU", Duration = "LISTBOX, Y U NO UPDATE?" });
listBox1.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)
我希望它为集合添加一个新元素,重新分配DataTemplate的源代码,然后用新数据更新屏幕.然而事实并非如此.我该怎么做呢?
显然这是POC代码,它只是达到目的的手段,我只是想让元素在此刻动态更新.此外,我可能会以错误的方式接近这一点,如果有更好的方法从模板动态添加屏幕上的元素,那么听到它们会非常有帮助.
谢谢大家.
你没有说明是什么类型列表,但我将假设它是一个普通的List <>.为了更新UI,它需要具有某种通知机制.框架通过INotifyPropertyChanged支持此功能.您可以在数据绑定类上实现INotifyPropertyChanged,并在添加时手动更新,或使用实现它的容器.最简单的方法是用ObservableCollection <>替换List <>.
var list = new ObservableCollection<NoteToSelf>();
list.Add(new NoteToSelf { Transcription = "oh hi", Duration = "9001 seconds" });
list.Add(new NoteToSelf { Transcription = "fgsfds", Duration = "$Texas seconds" });
listBox1.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
770 次 |
最近记录: |