2016-12-15 47 views
1

我正在用xaml和c#編寫一個UWP項目。我有一個右側圖像的堆疊面板,您可以點擊圖像,它會在堆疊面板左側顯示相關的較大圖像。如何確保UI在點擊時更新到正確的圖像?

大圖像初始設置爲與加載頁面時堆疊面板中第一個「小」圖像有關的「大」圖像,但是當您單擊堆棧面板中的任何其他小圖像時,大圖像不更新。

整件事是一個放置在彈出窗口內的數據模板。對於「大」的形象有關的XAML是在這裏:

<Border Background="White" Grid.Row="2"> 
    <Image Stretch="Uniform"> 
     <Image.Source> 
      <BitmapImage UriSource="{Binding SelectedImage}" /> 
     </Image.Source> 
    </Image> 
</Border> 

當點擊小圖片,它觸發該圖像的「螺紋」方法和方法是:

private void Image_Tapped(object sender, TappedRoutedEventArgs e) 
{ 
    var img = ((Windows.UI.Xaml.Controls.Image)sender).DataContext as obj 
    img.FlyoutContent.SelectedImage = new Uri(img.relatedPath); 
} 

我使用上面的代碼最初設置圖像,它的工作原理。點擊小圖標時,它不會改變大圖像。

在調試中,當我點擊堆疊面板中的小圖像時,我在「圖像輕敲」方法中斷,我可以看到uri得到正確更新並且沒有綁定錯誤。 UI永遠不會改變。

我錯過了什麼?

謝謝 扎克

*附註:在「目標文件」僅僅是一個自定義類的由名字。

+0

它看起來有點像你設置的點擊圖片,這可能已經具備了圖像的來源。你確定你正在更改正確圖像的圖像源嗎? –

+0

我不確定你在問什麼。你問我是否只是重新分配同一個uri到大圖像? – zachboy82

+0

我在問,它是否是您正在獲取引用的正確的DataContext對象。在改變它之前,SelectedImage路徑與你正在改變的路徑有什麼不同? –

回答

0

對於Binding屬性,您需要實現INotifyPropertyChanged類,以便UI自動更新。

class CustomClass : INotifyPropertyChanged 
{ 

    public event PropertyChangedEventHandler PropertyChanged; 

    private string _imageLink; 
    public string ImageLink 
    { 
     get 
     { 
      return _imageLink; 
     } 
     set 
     { 
      _imageLink = value; 
      RaisePropertyChanged(); 
     } 
    } 

    private void RaisePropertyChanged([CallerMemberName] string name = "") 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 
    } 

} 

或者你使用的是Tapped事件,爲什麼不給你的XAML元素的x:name這個名字的圖像源設置爲您URi

要更新ImageLink屬性,您需要在要更改屬性的頁面中創建CustomClass的實例。

CustomClass ab = new CustomClass();

ab.ImageLink = "code here";

+0

我會嘗試INotifyPropertyChanged。我不能使用「x:name」,因爲它位於作爲彈出窗口調用的數據模板中。我嘗試過,但它甚至不會在後面的代碼中找到名稱。 – zachboy82

+0

是的,我使用過'datatemplates',這對他們來說是真實的。所以在這種情況下INotifyPropertyChanged是你的方法。 – Ahmar

+0

[CallerMemberName]是將啓動更改的函數的名稱。但它處理程序本身,你不需要擔心它。 – Ahmar