1

我想開發我的第一個Windows應用商店應用程序。 我正在使用Hub應用程序模板。 我想在我中心頁的第一部分顯示來自URL的圖像:綁定BitmapImage UriSource

<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文件中手動設置了一個圖像url,它可以正常工作...

回答

1

問題是,綁定機制不知道在哪裏查找ImageUrl屬性。 您可以將標記的數據源或其父項的任何一個設置爲定義屬性的類實例。

或者您在每個綁定語句中使用更多信息。綁定到自己,只是用

UriSource="{Binding RelativeSource={RelativeSource Self}, Path=ImageUrl}" 

UriSource="{Binding ImageUrl, RelativeSource={RelativeSource Self}}" 

也看到WPF Bind to itself

編輯:

你還需要對你的變量,你綁定到一個通知機制。要麼使之成爲DependencyProperty或使用PropertyChanged event(通過INotifyPropertyChanged並在二傳手與屬性的名稱叫PropertyChanged上的變化,也可以創建活動名爲<name of property>Changed和改變調用此事件。

+0

對我不起作用:( – andrew

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類,得到itemsSourceListView

// In BlankPage.xaml.cs file 

public class model 
{ 
    public ImageSource bmp { get; set; } 
} 

現在,比方說我在Page_Loaded事件分配的ItemsSource到ListView

// 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; 
    } 

它會工作肯定。 如需更準確的答案,請在這裏詳細說明。

希望幫助..!

+0

我已經更新了我在代碼中的問題。我沒有在ListView中使用DataTemplate,但是在HubSection中,也是這個url是一個web url。我真的需要定義一個新的類來做到這一點?:/ – andrew

0

不幸的是,似乎BitmapSource.UriSource不能被數據綁定(或更具體地說,它只能綁定一次,忽略進一步的更改)。見討論here