我有一個無法解決的 xaml 問題。我不太熟悉 xaml 和系結,所以我尋求幫助(我使用 MAUI.NET)。我的問題是:
我有這個類MemoryInfo:
namespace APEEvo.Mobile.Settings
{
public static class MemoryInfo
{
public static LoginInfo CurrentUserInfo { get; set; }
}
}
CurrentUserInfo 指的是這個類:
namespace APEEvo.Commons
{
public class LoginInfo
{
public string UserName { get; set; }
public string UserNameFull { get; set; }
public string Role { get; set; }
}
}
我的目的是將標簽中的 MemoryInfo.CurrentUserInfo.UserNameFull 的資訊直接系結到 XAML(而不是通過代碼)。像這樣的東西:
<Label x:Name="txtUsername" Text="{Binding Mode=TwoWay, Source={x:DynamicResource Settings:MemoryInfo}, Path=LoginInfo.UserNameFull }" HorizontalOptions="Center" VerticalOptions="Center" Margin="0,0,15,0"/>
因此,當 MemoryInfo.CurrentUserInfo.UserNameFull 更改為另一個頁面時,我可以在此標簽中看到修改。
謝謝你的支持
為了更清晰,我更新了所有 xaml:
<?xml version="1.0" encoding="utf-8" ?>
<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:Settings="clr-namespace:APEEvo.Mobile.Settings"
x:Class="APEEvo.Mobile.Components.InfoBar">
<HorizontalStackLayout BackgroundColor="#85ABD5" >
<Grid Margin="5,5">
<Grid.RowDefinitions>
<RowDefinition Height="50" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition Width="90"/>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="90" />
<ColumnDefinition Width="90" />
<ColumnDefinition Width="90" />
</Grid.ColumnDefinitions>
<ImageButton Grid.Column="0" WidthRequest="25" HeightRequest="25" Source="icon_infobar_menu.png" Clicked="ImageButton_Clicked" Margin="0,0,10,0"/>
<ImageButton Grid.Column="1" x:Name="imgLogo" Source="logo_ae1.png" Clicked="ImageButton_Clicked" Margin="0,0,350,0"/>
<Grid Grid.Column="2" >
<HorizontalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Image Source="icon_infobar_tablet.png" WidthRequest="25" HeightRequest="25" Margin="0,0,5,0"/>
<Label x:Name="txtMachine" HorizontalOptions="Center" VerticalOptions="Center" Margin="0,0,15,0"/>
<Line Stroke="White" Y1="0" Y2="50" StrokeDashArray="4,4" StrokeDashOffset="2"/>
</HorizontalStackLayout>
</Grid>
<Grid Grid.Column="3" >
<HorizontalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Image Source="icon_infobar_login.png" WidthRequest="25" HeightRequest="25" Margin="0,0,5,0"/>
<Label x:Name="txtUsername" Text="{Binding Mode=TwoWay, Source={x:Null Settings:MemoryInfo.CurrentUserInfo}, Path=UserNameFullName }" HorizontalOptions="Center" VerticalOptions="Center" Margin="0,0,15,0"/>
<Line Stroke="White" Y1="0" Y2="50" StrokeDashArray="4,4" StrokeDashOffset="2"/>
</HorizontalStackLayout>
</Grid>
<Grid Grid.Column="4" >
<HorizontalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<ImageButton Source="icon_infobar_logout.png" BackgroundColor="Transparent" WidthRequest="25" HeightRequest="25" Margin="0,0,5,0" Clicked="ImageButtonLogout_Clicked"/>
<Label Text="Logout" HorizontalOptions="Center" VerticalOptions="Center" Margin="0,0,15,0"/>
<Line Stroke="White" Y1="0" Y2="50" StrokeDashArray="4,4" StrokeDashOffset="2"/>
</HorizontalStackLayout>
</Grid>
<Grid Grid.Column="5" >
<HorizontalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<ImageButton Source="icon_infobar_info.png" WidthRequest="25" HeightRequest="25" Margin="0,0,5,0" Clicked="ImageButtonHelp_Clicked"/>
<Label Text="Help" HorizontalOptions="Center" VerticalOptions="Center" Margin="0,0,15,0"/>
<Line Stroke="White" Y1="0" Y2="50" StrokeDashArray="4,4" StrokeDashOffset="2"/>
</HorizontalStackLayout>
</Grid>
<Grid Grid.Column="6" >
<HorizontalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Image Source="icon_infobar_clock.png" WidthRequest="25" HeightRequest="25" Margin="0,0,5,0"/>
<Label x:Name = "txtClock" Text="17:22" HorizontalOptions="Center" VerticalOptions="Center" Margin="0,0,15,0" />
</HorizontalStackLayout>
</Grid>
</Grid>
</HorizontalStackLayout>
uj5u.com熱心網友回復:
您實際上要問的是“如何系結靜態類的靜態屬性”。
第一的。您的屬性是不可觀察的。設定器應通知已進行更改。所以當這個靜態屬性從程式的其他地方設定時,它知道它必須在它系結到的地方更新。
第二。請不要做上述任何事情。10 年來,我不得不處理通過與靜態結構共享資料而撰寫的舊專案。除錯和修復問題是一場噩夢。
我建議你改變你的設計方法。
新用戶已登錄。您可能正在回傳您打開的頁面,并且想要更新 UI。覆寫 OnAppearing 并在那里進行更改。
如果您真的想共享,請通過依賴注入單例來實作。
builder.Services.AddSingleton<ILogin, LoginService>();
此外,有時您可能希望讓用戶保持登錄狀態。為什么不使用設定來存盤可以從應用程式中的任何位置訪問的資訊,并且在重新啟動應用程式后仍然可以重用。
public string FirstName
{
get => settings.Get("FirstName", "");
set => settings.Set("FirstName", value);
}
編輯:在某些情況下,我需要傳遞在分離的段之間發生了某些事情的資訊(并使它們盡可能分開),我使用 CommunityToolkit.MVVM 訊息傳遞。
這是避免使用靜態類的另一種不錯的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529820.html
標籤:C#。网xml捆绑毛伊岛
