2017-04-14 15 views
0

私はGridviewItemを持っています。このGridviewItemは背景を持ち、ImageBrushです。今度は、特定のボタンをクリックするときに、このImageBrushを新しいソースに変更したいと思います。このためUWPのページ上のイメージを更新するには?

私が使用しています:

blck.Background = new ImageBrush(new BitmapImage(new Uri("ms-appx:///Assets/SensorBG.png"))); 

それは仕事をし、私は、対応するGridviewItemをクリックするたびしかし、新たな画像のみを示しています。 GridviewItemをクリックすることなく、誰かに更新方法を教えてもらえますか?

私はすでにいない成功を収めて、このブロックの中に入れて試してみた:あなたは、適切なプロパティを使用してItemClassを定義した場合、可能とINotifyPropertyChangedのを実装し

  CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () => 
      { 
       blck.Background = new ImageBrush(new BitmapImage(new Uri("ms-appx:///Assets/SensorBG.png"))); 
      } 
      ); 

答えて

1

最高 - 適切でバインドするたびに、すべての変更がUIを更新します。

<StackPanel> 
    <Button Content="Change background of second item" Click="Button_Click"/> 
    <GridView Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" ItemsSource="{x:Bind Items}"> 
     <GridView.ItemTemplate> 
      <DataTemplate x:DataType="local:ItemClass"> 
       <Border> 
        <Border.Background> 
         <ImageBrush ImageSource="{x:Bind Image, Mode=OneWay}"/> 
        </Border.Background> 
        <TextBlock Text="{x:Bind Name}"/> 
       </Border> 
      </DataTemplate> 
     </GridView.ItemTemplate> 
    </GridView> 
</StackPanel> 

と背後にあるコード:

public sealed partial class MainPage : Page 
{ 
    public List<ItemClass> Items = new List<ItemClass>(); 

    public MainPage() 
    { 
     Items.Add(new ItemClass { Name = "First item", Image = new BitmapImage(new Uri("ms-appx:///Assets/StoreLogo.png")) }); 
     Items.Add(new ItemClass { Name = "Second item", Image = new BitmapImage(new Uri("ms-appx:///Assets/StoreLogo.png")) }); 
     this.InitializeComponent(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) => Items[1].Image = new BitmapImage(new Uri("ms-appx:///test.jpg")); 
} 

public class ItemClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaiseProperty(string name) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); 

    private ImageSource image; 
    public ImageSource Image 
    { 
     get { return image; } 
     set { image = value; RaiseProperty(nameof(Image)); } 
    } 

    public string Name { get; set; } 
} 
XAML - ここに小さなサンプルです
関連する問題