我有datagridview在我的弹出页面,从那里选择项目,然后我想更新选定的值在该主页上。但我不能更新这个标签。我将这两个页面绑定到同一个视图模型。我控制弹出页面关闭与此:
protected override void OnDisappearing()
{
viewModel.CarilisteClose = true;
base.OnDisappearing();
}
字符串
这是我的财产:
public bool CarilisteClose { get => carilisteClose; set {
carilisteClose = value;
OnPropertyChanged();
Console.WriteLine(carilisteClose);
changeCariText(carilisteClose);
} }
型
之后,我可以从输出中看到属性True和选定项。但是SearchCari在pupoppage关闭后无法更新。
public string SearchCari => $"{secilenCari}";
void changeCariText (bool mbool ) {
Console.WriteLine("change cari work");
if (mbool==true)
{
var adi = Preferences.Get("selectedCariAdi", "");
var kodu = Preferences.Get("selectedCariKodu", "");
secilenCari = $"{kodu} {adi}";
Console.WriteLine("cari liste close " + secilenCari);
OnPropertyChanged(nameof(SearchCari));
Console.WriteLine(SearchCari);
}
}
<Label Text="{Binding SearchCari}" x:Name="secilenCariText3" TextColor="Black" FontSize="Medium" WidthRequest="200" HeightRequest="50" HorizontalOptions="Center" VerticalOptions="Center"/>
型
编辑:好吧,我意识到:我不能更新标签,而关闭弹出页面,但当我添加按钮和设置按钮命令这个changeCariText()它更新标签。
更新https://www.paste.tc/depoaktarimpageviewmodel视图模型
https://www.paste.tc/depoaktarimpagexaml Xaml https://www.paste.tc/caripopuppage第2页
**解决方案:**保存:
CariRoot:要发送的对象
selectedCari:要从此页发送的选定对象。
mselectedCari:分隔消息的键。
MessagingCenter.Send<CariRoot>(selectedCari, "mselectedCari");
型
要获取您保存的内容,请执行以下操作:
MessagingCenter.Subscribe<CariRoot>(this, "mselectedCari" ,async (sender) =>
{
SearchCari = $"{sender.CARIUNVAN}";
_SelectedCariRoot = sender;
});
型
您需要在视图模型中使用这些代码。
1条答案
按热度按时间xkrw2x1b1#
我将这两个页面绑定到同一个视图模型。
即使两个页使用相同的视图模型,当示例化两个不同的页时,也会创建同一个类的两个示例。因此,这两个页不共享相同的值,甚至不共享相同的属性。
但是您可以将数据传递给要更新特殊属性值的页面的Viewmodel示例。
有几种方法可以传递数据。
例如,您可以使用MessagingCenter或
EventHandler
来实现这一点。对于如何使用EventHandler,您可以检查线程here。
更新:
我添加了一个按钮,然后changeCariText()函数工作正常,更新我的文本,但当我关闭pouppage这个changeCariText()不更新文本。
请重新检查您是否已经为您的viewmodel实现了接口
INotifyPropertyChanged
,并为您想要更新其值和UI的属性调用了OnPropertyChanged
。可以参考以下代码:
字符串
更新2
你仍然不应该弄清楚一个类的两个示例之间的区别。这两个页面创建了类
DepoAktarımPageViewModel
的两个示例。在页面DepoAktarımPage
上添加一个Button来更改SearchCari
的值,并在页面DepoAktarımPage
的示例上执行此操作。关闭页面CariPopUpPage
时,将更改页面CariPopUpPage
示例上的SearchCari
的值。这两个示例是不相关的,这意味着两个示例的数据不共享,即使它们是同一个类的示例。因此,更改页面CariPopUpPage
的ViewModel上的值根本不会影响页面DepoAktarımPage
的ViewModel上的数据。对于这个问题,可以使用
MessagingCenter
或EventHandler
来实现。想了解更多信息,你可以查看我的第一个答案。