XAML 如何在Xamarin表单中从个人资料页面返回时更新图像

2o7dmzc5  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(185)

我有一个要求,以更新我的 Jmeter 板上的图像,一旦它已更新下一页(个人资料页)。
导航: Jmeter 板-〉配置文件页面-〉更新图像-〉 Jmeter 板(按下后退按钮)
XAML

<ImageButton x:Name="profilePicThumbnail"
                 ....
                 Command="{Binding UserProfileBtn}"
                 IsVisible="{Binding IsRemotePic}">
           <ImageButton.Source>
                 <UriImageSource Uri="{Binding UserPic, Mode=TwoWay}"
                                 CachingEnabled="false"/>
           </ImageButton.Source>

    </ImageButton>

ViewModel.cs

private Uri userpic;
    public Uri UserPic
    {
        get { return userpic; }
        set
        {
            userpic = value;
            OnPropertyChanged();
        }
    }

如何为UserPic提供数据

UserPic = new Uri(dash.student_details.profile_pic); //URL as a string

但是我的图片没有更新,虽然我在个人资料页面更新后调用了相对方法并返回到 Jmeter 板。从后端接收的URL字符串始终相同(但更新后的图片不同)
有没有办法做到这一点?”

e5nszbig

e5nszbig1#

更新:

另一种方法是使用MessagingCenterWeakReferenceMessenger(对于WeakReferenceMessenger,您必须从www.example.com安装CommunityToolkit.Mvvm包nuget.org)。
假设ProfilePage中有一个Clicked方法for button来更新UserPic,在ProfilePage中这个方法中,我们发送一个消息告诉Dashboard的viewmodel来更新UserPic。

void Button_Clicked(System.Object sender, System.EventArgs e)
    {
        Uri newUri = new Uri("...");
        MessagingCenter.Send<ProfilePage, Uri>(this, "Hi", newUri);
    }

因此在DashboardViewModel中,我们只需订阅此消息,然后更新值。

public DashboardViewModel()
{
    MessagingCenter.Subscribe<ProfilePage, Uri>(this, "Hi", (sender, arg) =>
    {
        UserPic = arg;
    });
}

不要忘记实现INotifyPropertyChanged。
现在,当您向后导航或按下后退按钮时,该值应该会更新。
如果你想使用WeakReferenceMessenger,那几乎是一样的,
发送消息:

WeakReferenceMessenger.Default.Send(new MyMessage(item));

接收消息:

WeakReferenceMessenger.Default.Register<MyMessage>(this, (r, item) =>
    {
        UserPic = item.value;
    });

如果你有什么问题,尽管问。
=================原点答案=============
如果我没理解错的话,你应该不想更新ProfilePage中Dashboard的属性。我做了一个演示来分享我的想法。
假设ProfilePage中有一个Clicked方法来更新UserPic。
在这个方法中,我们做以下事情:
1.首先创建“ Jmeter 板”页,然后
1.然后更改bindingContext(ViewModel页面绑定到)的UserPic属性
1.最后导航到“控制面板”页面

void mybutton_Clicked(System.Object sender, System.EventArgs e)
 {
     var page = new Dashboard();
     DashboardViewModel bindingContext = page.BindingContext as DashboardViewModel;
     // Here you could change the ViewModel's UserPic, then navigation
     bindingContext.UserPic = new Uri(...);
     Navigation.PushAsync(page);
 }

不要忘记设置Dashboard的BindingContext:

this.BindingContext = new DashboardViewModel();

希望对你有用。

相关问题