繁体   English   中英

WP7中的数据绑定快速入门示例存在问题

[英]Problems with Data Binding Quickstart examples in WP7

在尝试学习数据绑定时,我发现其中一个快速入门示例不起作用。 你能告诉我它是不是错了或者我在某个地方出错了?

http://create.msdn.com/zh-CN/education/quickstarts/Data_Binding_to_Controls#DisplayingItemsWithDataTemplate

该示例使用CollectionView Source和ObservableCollection类将数据动态绑定到UI元素。 我用的是列表选择器而不是组合框。 我如何发现文本块不会随着列表选择器中的选择更改而更改。 我是否必须实施INotifyProperty Changed? 以下是我的C#代码

namespace binding3
{
public partial class MainPage : PhoneApplicationPage
{
public ObservableCollection<Recording> MyMusic = new ObservableCollection<Recording>();
// Constructor
public MainPage()
{
    InitializeComponent();
    MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live", new DateTime(2008, 2, 5)));
    MyMusic.Add(new Recording("Luka Abrus", "The Road to Redmond", new DateTime(2007, 4, 3)));
    MyMusic.Add(new Recording("Jim Hance", "Best of Jim Hance", new DateTime(2007, 3, 6)));
    //listPicker1.DataContext = MyMusic;
    //RecordingDetails.DataContext = new CollectionViewSource { Source = MyMusic };
    LayoutRoot.DataContext = new CollectionViewSource { Source = MyMusic };
}

public class Recording 
{
    public Recording() { }
    public Recording(string artistName, string cdName, DateTime release)
    {
        Artist = artistName;
        Name = cdName;
        ReleaseDate = release;
    }

    public string Artist { get; set; }
    public string Name { get; set; }
    public DateTime ReleaseDate { get; set; }

    public override string ToString()
    {
        return Name + " by " + Artist + ", Released: " + ReleaseDate.ToShortDateString();
    }

}

这是xaml设计

<!--ContentPanel - place additional content here-->
<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <toolkit:ListPicker Height="150" HorizontalAlignment="Left" Margin="5" x:Name="listPicker1"
                        VerticalAlignment="Top" Width="400" ItemsSource="{Binding}" FontSize="18">
        <toolkit:ListPicker.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="2">
                    <TextBlock Text="Artist:" Margin="2"/>
                    <TextBlock Text="{Binding Artist}" Margin="2"/>
                    <TextBlock Text="CD:" Margin="10,2,0,2"/>
                    <TextBlock Text="{Binding Name}" Margin="2"/>
                </StackPanel>
            </DataTemplate>
        </toolkit:ListPicker.ItemTemplate>
    </toolkit:ListPicker>
    <StackPanel x:Name="RecordingDetails">
        <TextBlock Text="{Binding Artist}" Margin="5,0,0,0"/>
        <TextBlock Text="{Binding Name}" Margin="5,0,0,0"/>
        <TextBlock Text="{Binding ReleaseDate}" Margin="5,0,0,0"/>
    </StackPanel>
</StackPanel>

谢谢,

阿尔法

像这样修改xaml时,代码有效

<StackPanel x:Name="RecordingDetails">
            <TextBlock Text="{Binding SelectedItem.Artist, ElementName= listPicker1}" Margin="5,0,0,0"/>
            <TextBlock Text="{Binding SelectedItem.Name, ElementName= listPicker1}" Margin="5,0,0,0"/>
            <TextBlock Text="{Binding SelectedItem.ReleaseDate,ElementName= listPicker1}" Margin="5,0,0,0"/>
 </StackPanel>

您需要将列表选择器的选定项绑定到文本块,以便在更改选择时更新文本块。 不知道是否有更好的方法。 无论如何,这解决了问题。

阿尔法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM