簡體   English   中英

如何將 HamburgerButtonInfo 的可見性綁定到 ShellViewModel 以外的另一個視圖模型?

[英]How to bind a visibility of HamburgerButtonInfo to another viewmodel other than ShellViewModel?

問題

  1. 如何通過不使用 shellviewmodel 來更改我的漢堡按鈕的可見性? Ps:它是一個在 template10 上工作的 UWP 應用程序。
  2. 是否可以將漢堡按鈕可見性綁定到模板 10 中的兩個不同的視圖模型?

Shell.xaml

xmlns:vm="using:ScanWorx.ViewModels"
xmlns:converters="using:ScanWorx.ViewModels"

<Page.DataContext>
    <vm:ShellViewModel x:Name="ViewModel" />
</Page.DataContext>

<Page.Resources>
    <converters:BooleanToVisibilityConverter x:Key="Converter" />
</Page.Resources>

<controls:HamburgerMenu x:Name="MyHamburgerMenu">
    <controls:HamburgerMenu.PrimaryButtons>
        <!--  HeatMap Generator Button  -->
        <controls:HamburgerButtonInfo  ClearHistory="True" PageType="views:HeatMapGeneratorPage" 
                                       Visibility="{x:Bind vm:LoginPageViewModel.abc, Mode=TwoWay, 
                                                    Converter={StaticResource Converter}}">
            <StackPanel Orientation="Horizontal">
                <SymbolIcon
                    Width="48"
                    Height="48"
                    Symbol="ViewAll" />
                <TextBlock
                    Margin="12,0,0,0"
                    VerticalAlignment="Center"
                    Text="HeatMap Generator" />
            </StackPanel>
        </controls:HamburgerButtonInfo>

    </controls:HamburgerMenu.PrimaryButtons>
</controls:HamburgerMenu>

LoginPageViewModel.cs

namespace ScanWorx.ViewModels
{
   class LoginPageViewModel : ViewModelBase
   {
      public static bool abc { get; set; }
      public static Visibility visibility1 { get; set; }

      public async void Button_Login_Click()
      {
         try
         {
            *code to decrypt my login details and then after decryptng i check for next condition*
            if (ApplicationData.Current.LocalSettings.Values["UserAccessLevel"].ToString() == "Administrator")
            {
                abc = true;
                visibility1 = Visibility.Visible;
            }
            else
            {
                abc = false;
                visibility1 = Visibility.Collapsed;
            }
         }
      }
   }
}

ShellViewModel.cs

  • 如果我在綁定中使用 shellviewModel 隱藏可以通過更改 - Visibility="{x:Bind vm:ShellViewModel.ShowButton} ,但是這樣它只能硬編碼為 false 或 true ,使其在應用程序啟動時可見或折疊一次。
  • 但我不想用 shell 視圖 model 更改按鈕的可見性,我想在使用 LoginPageViewModel * 登錄后更改它

     namespace ScanWorx.ViewModels { class ShellViewModel: ViewModelBase { public static bool ShowButton { get; set; } public ShellViewModel() { ShowButton = false; } } }

如何將 HamburgerButtonInfo 的可見性綁定到 ShellViewModel 以外的另一個視圖模型?

更好的方法是進行全局設置 class 以記錄是否登錄。 登錄成功后,將設置 class ShowButton bool 屬性設置為 true。

設置.cs

public class Setting : INotifyPropertyChanged
{
    private bool _showBtn = false;
    public bool ShowBtn
    {
        get { return _showBtn; }
        set { _showBtn = value; OnPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Xaml 綁定

<Application.Resources>
    <ResourceDictionary>
        <local:Setting x:Key="Setting"/>
    </ResourceDictionary>
</Application.Resources>

......

Visibility="{Binding ShowBtn, Source={StaticResource Setting}}"

價值變化

((Setting)Application.Current.Resources["Setting"]).ShowBtn = true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM