WPF: Как поменять содержимое ячеек Listview с помощью datatrigger (или эквивалентного) - PullRequest
3 голосов
/ 28 декабря 2008

У меня есть приложение WPF, которое реализует ListView. Я хотел бы показать изображение (маленький значок) в одном из столбцов в зависимости от типа данных, которые представляет строка. Вроде как дисплей, который вы видите в проводнике Windows.

Я использую DataTriggers в другом месте моего XAML, похоже, что аналогичный метод может быть использован для выгрузки содержимого всей ячейки, но я не могу найти пример того, кто это делает.

Есть мысли?

Ответы [ 2 ]

3 голосов
/ 08 мая 2009

Для этого есть три распространенных метода.

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, который охватывает вашу модель данных. Эта модель представления будет оценивать свойства модели данных и объединять их с логикой в ​​новое свойство.

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>
0 голосов
/ 28 декабря 2008

В прошлом я использовал ValueConverters для предоставления изображения, которое я хочу отобразить, однако я заинтригован возможностью использования DataTriggers для этой цели.

Беатрис Штольниц публикует решение похожей проблемы здесь .

...