簡體   English   中英

WPF:如何將Listview單元格內容與datatrigger(或等效的)交換

[英]WPF: How to swap Listview cell content with a datatrigger (or equivalent)

我有一個實現ListView的WPF應用程序。 我想在其中一列中顯示一個圖像(一個小圖標),具體取決於該行所代表的數據類型。 有點像您在Windows資源管理器中看到的顯示。

我在我的XAML中的其他地方使用DataTriggers,似乎可以使用類似的方法來交換整個單元格內容,但我找不到任何人這樣做的示例。

有什么想法嗎?

有三種常見的技術。

1)DataTrigger:

<DataTemplate x:Key="ImageColumn">
    <Grid>
        <Image x:Name="img" Source="MyImage.png"/>
        <Rectangle x:Name="rect" Fill="Red" Visibility="Hidden"/>
    </Grid>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding TriggerProperty}" Value="2">
            <Setter TargetName="rect" Property="Visibility" Value="Visible"/>
            <Setter TargetName="img" Property="Visibility" Value="Hidden"/>
        </DataTrigger>
        <!--etc...-->
    </DataTemplate.Triggers>
</DataTemplate>

2)ValueConverters:

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string strVal = value as string;
        switch (strVal)
        {
            case "2":
                Rectangle rect = new Rectangle();
                rect.Fill = Brushes.Red;
                return rect;

            default:
                Image img = new Image();
                ImageSourceConverter s = new ImageSourceConverter();
                img.Source = (ImageSource)s.ConvertFromString("MyImage.png");
                return img;
        }
    }
}

3)MVVM(Model-View-ViewModel):

創建一個包裝數據模型的ViewModel類。 此ViewModel將評估數據模型中的屬性,並將它們與邏輯組合到一個新屬性中。

public UIElement Icon
{
    get
    {
        if (TriggerProperty == "2")
        {
            Rectange rect = new Rectangle();
            rect.Fill = Brushes.Red;
            return rect;
        }

        else
        {
            Image img = new Image();
            ImageSourceConverter s = new ImageSourceConverter();
            img.Source = (ImageSource)s.ConvertFromString("MyImage.png");
            return img;
        }
    }
}

和XAML:

<DataTemplate x:Key="ImageColumn">
    <ContentControl Content="{Binding Icon}"/>
</DataTemplate>

在過去,我使用ValueConverters來提供我想要顯示的圖像,但是我很想知道為此目的使用DataTriggers的可能性。

Beatriz Stollnitz 在這里發布了類似問題的解決方案。

暫無
暫無

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

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