簡體   English   中英

控制多個網格的可見性

[英]controlling multiple grids visibility

我有一個WPF應用程序。 它包含許多網格。 我正在使用(嘗試使用)MVVM模式。

因此,在我的視圖模型中,我具有System.Windows.Visibility屬性,可以控制網格是可見的還是折疊的。 這一切都很好。

但是說我有50個網格。 我只希望一次可見。 因此,可以說啟動時的應用程序顯示grid1。 然后,用戶單擊一個按鈕,這意味着grid2現在應該可見,並且grid1應該折疊。

我可以用下面的代碼來做到這一點,盡管我感覺這是一個糟糕的方法,因為它不是很可擴展

    void GridSelector(string gridName)
    {
        if(gridName == "grid1")
        {
            Grid1 = Visibility.Visible;
            Grid2 = Visibility.Collapsed;
            Grid3 = Visibility.Collapsed;
            ...
            Grid50 = Visibility.Collapsed;
        }
        else if(gridName == "grid2")
        {
            Grid1 = Visibility.Collapsed;
            Grid2 = Visibility.Visible;
            Grid3 = Visibility.Collapsed;
            ...
            Grid50 = Visibility.Collapsed;
        }
        ...
      }

有什么更好的方法? 這是我應該使用反射的地方嗎?

您可以使用將所選網格ID轉換為可見性的轉換器,如下所示:

public class GridIdToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        return value.ToString() == parameter.ToString() ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, 
        object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

並將其應用於您的網格

<Grid Visibility="{Binding SelectedGridId, Converter={StaticResource GridIdToVisibilityConverter}, ConverterParameter=grid1}/>

暫無
暫無

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

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