簡體   English   中英

根據數據中的屬性控制GridView頁腳的可見性

[英]Control the visibility of GridView Footer based on a property within the Data

我正在做一個項目,如果已​​在Gridview加載的數據中有某些屬性可用,則必須顯示GridviewFooter
我使用自定義DataTemplateSelector類在Gridview顯示數據,但該屬性存在於主類中。

public class ItemTemplateData
{
  public string PropertyToShowFooter {get; set;}
}
// other classes derive from this main class
public class VideoItemTemplateData : ItemTemplateData
{
  // other properties not related here
}

現在,如果我在Gridview顯式創建一個Footer作為DataTemplate ,它可以按預期工作,但是如果我在Dictionary創建一個DataTemplate並嘗試使用它,則它不起作用。 它始終顯示Footer屬性是否為空。 我使用Converter來轉換屬性以控制Visibility

更新:

沒有代碼/方法有效! 無論如何,它始終顯示或隱藏頁腳。

// First method that I tried
<Gridview>
....
<GridView.FooterTemplate>
    <DataTemplate
        x:DataType="data:ItemTemplateData">
        <UserControl>
            <HyperlinkButton
                Visibility="{x:Bind PropertyToShowFooter, Mode=OneWay, Converter={StaticResource StringToVisibleConverter}}"
                Click="HyperlinkButton_Click"
                Style="{StaticResource GridViewFooterLinkStyle}"/>
            </UserControl>
        </DataTemplate>
</GridView.FooterTemplate>
</Gridview>

// 2nd method that I tried and really want this one to work.
<DataTemplate
        x:Key="GridViewCustomFooterTemplate"
        x:DataType="data:ItemTemplateData">
    <UserControl>
    <HyperlinkButton
        Visibility="{x:Bind PropertyToShowFooter, Mode=OneWay, Converter={StaticResource StringToVisibleConverter}}"
        Click="HyperlinkButton_Click"
        Style="{StaticResource GridViewFooterLinkStyle}"/>
    </UserControl>
</DataTemplate>

<GridView
     FooterTemplate="{StaticResource GridViewCustomFooterTemplate}"/>

TemplateSelector更多詳細信息:

public class DataTemplateSelectorClass : DataTemplateSelector
{
    public DataTemplate VideoItemTemplate { get; set; }


    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        if (item is VideoItemTemplateData)
        {
            return VideoItemTemplate;
        }

        return base.SelectTemplateCore(item, container);
    }
}

Footer只是一個簡單的HyperlinkButton ,根據轉換器應該是可見的或折疊的。 如果屬性中包含非空字符串,則該字符串將可見,否則將被折疊。

字符串可見性轉換器:

public class StringToVisiblity : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (value is string && value != null)
        {
            if (value.ToString().Trim().Length > 0)
            {
                return Visibility.Visible;
            }
        }
        return Visibility.Collapsed;
    }

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

我不確定頁腳如何從Gridview的項目中確定其DataContext 任何建議都會有所幫助。 謝謝

頁腳必須知道從何處獲取價值。 如果列表包含多個項目,則無法知道應使用哪個項目。 要使頁腳模板中的綁定起作用,您必須直接將Footer屬性設置為它應使用的實例:

<GridView Footer="{x:Bind TheOneItemTemplateData}"> ... </GridView>

暫無
暫無

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

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