我正在尝试为WP8制作一个应用程序,但我不能为我的生活弄清楚数据绑定是如何工作的。我已经尝试了一些示例,看起来他们的表现与我完全一样,但似乎没有任何效果。基本上,配置文件类包含配置文件的名称和图标。我想在屏幕上显示这些配置文件的列表,其名称位于图标右侧。
当我在WP8手机模拟器中运行项目时,根本没有任何显示。如果我将DataTemplate中的元素(即源和文本)的属性更改为绝对字符串,它可以正常工作。
MainPage.xaml中:
<phone:PhoneApplicationPage ..>
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.Resources>
<DataTemplate x:Name="ProfileListTemplate">
<StackPanel Margin="10">
<Image Grid.Column="0" Width="50" Height="50" Source="{Binding ImageSource}" Stretch="Fill"/>
<TextBlock Grid.Column="1" Text="{Binding ProfileName}" Margin="10" HorizontalAlignment="Left" FontSize="36"/>
</StackPanel>
</DataTemplate>
</Grid.Resources>
<phone:LongListSelector x:Name="ProfilesList" Grid.Row="1" VerticalAlignment="Top" FontSize="36" Height="535" Margin="10,0,0,0" ItemTemplate="{StaticResource ProfileListTemplate}"/>
</Grid>
</phone:PhoneApplicationPage>
MainPage.xaml.cs中:
namespace Profiles
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
ObservableCollection<Profile> ProfilesCollection = new ObservableCollection<Profile>();
ProfilesCollection.Add(new Profile("Nighttime"));
ProfilesCollection.Add(new Profile("Work"));
ProfilesCollection.Add(new Profile("Home"));
ProfilesList.ItemsSource = ProfilesCollection;
}
}
}
“个人资料”类:
namespace Profiles
{
class Profile
{
public string ProfileName = "";
public string ImageSource = "/Resources/Delete.png";
public Profile(string name)
{
ProfileName = name;
}
}
}
答案 0 :(得分:2)
尝试将ProfileName
和ImageSource
从字段更改为属性。
class Profile
{
private const string DefaultImageSource = "/Resources/Delete.png";
public string ProfileName { get; set; }
public string ImageSource {get; set; }
public Profile(string name)
{
ProfileName = name;
ImageSource = DefaultImageSource;
}
}
答案 1 :(得分:0)
将您的Profile类更改为属性,如下所示...
public class Profile
{
string profileName = "";
string imageSource = "/Resources/Delete.png";
public string ProfileName
{
get
{
return profileName;
}
set
{
profileName = value;
}
}
public string ImageSource
{
get
{
return imageSource;
}
set
{
imageSource = value;
}
}
public Profile(string name)
{
ProfileName = name;
}
}
随着您的逻辑越来越复杂,添加更多行为就变得相对微不足道了,如果您需要跟踪单个对象中的更改,还可以实现INotifyPropertyChanged。