我的问题是:xaml元素(InfoBar)从后端绑定源数据,用元素属性改变InfoBar的消息,源数据(绑定InfoBar的消息)改变;
但是,当我更改源数据(我绑定的)时,信息栏没有显示我更改的消息。
源代码:https://github.com/npbcts/ShowMessageT.git
源代码(其他部分):https://github.com/npbcts/ShowMessageT.Core.git
//======================我的想法===================
我想创建一个信息栏,你可以在这个WinUI3应用程序的任何地方显示这个信息栏上的信息。
例如:在ShellPage上创建的InfoBar,可以在MainPage的Page中使用方法显示信息。
框架:.net6.0,IDE:可视化工作室2022
一个WinUI3桌面使用MVVM,创建与"模板工作室的WinUI"模板。
本模板主要技术有:
- 使用微软.扩展.依赖注入;
- 使用社区工具包、Mvvm、组件模型;
正如你所知道的服务. AddSingleton方法,你可以得到一个对象,属性的消息绑定对象的数据,然后你改变这个应用程序的任何地方的对象的数据,信息栏的消息将改变,并显示新的(理论上)。
//===========创建元素(信息栏)和绑定数据的过程========
shellPage.xaml:
<InfoBar Grid.Row="3" x:Name="ShellTipInfo" Margin="36,5,36,0" x:FieldModifier="Public"
IsOpen="{x:Bind ViewModel.TheTipInfoMessage.IsOpen, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Message="{x:Bind ViewModel.TheTipInfoMessage.Message, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Severity="Informational"
Title="Title"
CloseButtonClick="ShellTipInfo_CloseButtonClick" />
ShellViewModel.cs
public class ShellViewModel : ObservableRecipient
{
public ITipInfoServices TheTipInfoMessage;
public ShellViewModel(ITipInfoServices _tipInfoMessage )
{
TheTipInfoMessage = _tipInfoMessage;
}
}
//============对象的生成服务,依赖注入==================
一个二个一个一个
在App. xaml. cs中注册服务(依赖注入)
services.AddSingleton<ITipInfoServices, TipInfoServices>();
//=================更改源数据并在信息栏上观察更改================ =/在主页上创建服务对象,更改提示信息消息。消息:
MainPage.xaml.cs
var tipInfoMessage = App.GetService<ITipInfoServices>();
tipInfoMessage.IsOpen = true;
tipInfoMessage.Message = "a message......";
结果是,你看不到信息栏上的消息。为什么?我困惑了很长时间...
我看了微软的文档,没有找到答案。有人能帮我吗?非常感谢!
1条答案
按热度按时间hs1ihplo1#
AFAIK,你不能绑定到一个接口,在这个例子中是
ITipInfoServices
。其中一个变化应该会起作用:
TipInfoServices
代替ITipInfoServices
。或