我正在尝试开发我的第一个Windows应用商店应用。 我正在使用Hub Application模板。 我想在我的HubPage的第一部分中显示来自URL的图像:
<HubSection ... >
<DataTemplate>
<Grid ... >
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
...
</Grid.RowDefinitions>
<Image Name="UserProfileImage" Margin="100, 0, 100, 0" Grid.Row="0" VerticalAlignment="Top">
<Image.Source>
<BitmapImage UriSource="{Binding ImageUrl}"></BitmapImage>
</Image.Source>
</Image>
</Grid>
</DataTemplate>
</HubSection>
在我的HubPage.xaml.cs中:
[DefaultValue("http://images6.fanpop.com/image/photos/34200000/more-dumb-images-of-philip-j-fry-futurama-34257101-1440-900.png"")]
public string ImageUrl { get; set; }
但没有显示任何内容。如果我在xaml文件中手动设置图像网址,它可以正常工作......
答案 0 :(得分:1)
问题是,Binding机制不知道在哪里查找ImageUrl属性。 您可以将标记的DataSource或其任何父项设置为类的实例,其中定义了属性。
或者您在每个Binding语句中使用更多信息。要绑定到自己,只需使用
UriSource="{Binding RelativeSource={RelativeSource Self}, Path=ImageUrl}"
或
UriSource="{Binding ImageUrl, RelativeSource={RelativeSource Self}}"
编辑:
您还需要在绑定的变量上设置通知机制。要么使其成为DependencyProperty
,要么使用PropertyChanged event
(通过INotifyPropertyChanged
并使用属性名称调用PropertyChanged
更改setter,或创建名为{的事件{1}}并在更改时调用此事件。
答案 1 :(得分:1)
不幸的是,BitmapSource.UriSource
似乎无法数据绑定(或者更具体地说,它只能被绑定一次,而忽略了进一步的更改)。请参阅讨论here。
答案 2 :(得分:0)
在您的代码中,您使用的是<DataTemplate>
,这意味着对此的父级控制将是<ListView>
或类似的内容。
您的代码很少反映您的方案。
我建议您绑定ImageSource
而不是string
而是在XAML部分工作,我建议你编辑你的代码隐藏部分。
我在这里简要介绍了样本。将此与您的情况联系起来并且确实需要。
示例: - 强>
// BlankPage.xaml ----
// eg. I've a listView and i want to display
// image dynamically in DataTemplate
<ListView x:Name="lstView">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Image Source="{Binding bmp}" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
现在,定义一个model
课程,将itemsSource
提供给ListView
。
// In BlankPage.xaml.cs file
public class model
{
public ImageSource bmp { get; set; }
}
现在,比方说我在ListView
事件中将itemsSource分配给Page_Loaded
。
// in BlankPage.xaml.cs file
// declare this BlankPage's Loaded event in BlankPage's Constructor
// and define the event handler like this
void BlankPage2_Loaded(object sender, RoutedEventArgs e)
{
model m1 = new model()
{
bmp = new BitmapImage(new Uri("ms-appx:///Assets/TechVista(300x300).png", UriKind.Absolute))
};
// here "ms-appx:///Assets/TechVista(300x300).png" should be the Full-System-Path where image is located.
// and according to that declare the UriKind as Relative or Absolute or other.
List<model> lstModels = new List<model>();
lstModels.Add(m1);
// you can add as many models as you want here.
// for reference I'm adding only one here.
lstView.ItemsSource = lstModels;
}
它肯定会起作用。 有关更准确的答案,请在此处详细说明。
希望有帮助..!