根据条件在ListView中设置图像

时间:2013-12-05 10:43:34

标签: c# wpf visual-studio-2010 xaml

我正在做一个预算模块。 我想问一下如何设置GridViewColumn根据我从数据库中检索到的值“收入”&amp ;;来显示我想要的图像。 “花费”。我知道如何从数据库中检索值&在lisview中显示,但我今天的问题是,我希望有一些条件,当发现“收入”将填入收入图像然后发现费用将填充另一个图像???

这可能吗?希望尽快收到回复。谢谢。

我会提供我的代码以便更好地参考: XAML文件:

    <DataTemplate x:Key="CategoriesType">
        <Border BorderBrush="#FF000000" BorderThickness="1,1,0,1" Margin="-6,-2,-6,-2">
            <StackPanel Margin="6,2,6,2">
                <TextBlock Text="{Binding Path=CategoriesType}"/>
            </StackPanel>
        </Border>
    </DataTemplate>

    <Style x:Key="MyItemContainerStyle" TargetType="{x:Type ListViewItem}">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="VerticalContentAlignment" Value="Stretch" />
        <!--<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />-->
    </Style>
</Window.Resources>

<ListView Height="320" HorizontalAlignment="Left" Margin="12,154,0,0" Name="CategoriesListView" VerticalAlignment="Top" Width="316" ItemsSource="{Binding}" ItemContainerStyle="{DynamicResource MyItemContainerStyle}">
    <ListView.View>
        <GridView>

            <GridViewColumn Header="Types" Width="40"  CellTemplate="{DynamicResource CategoriesType}"/>

        </GridView>
    </ListView.View>
</ListView>

2 个答案:

答案 0 :(得分:0)

在模板中添加图像标记并使用转换器根据字符串值(未经测试的代码)返回正确的图像

XAML:

 <UserControl.Resources>
     <Converters:TypeToImageConverter x:Key="typeToImageConverter" />
 </UserControl.Resources>

 <StackPanel Margin="6,2,6,2">  
  <Image Source="{Binding Path=CategoriesType,Converter={StaticResource typeToImageConverter}"/>
  <TextBlock Text="{Binding Path=CategoriesType}"/>
</StackPanel>

输入Image Converter.cs:

public class TypeToImageConverter : IValueConverter
{
       public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
           throw ...

        var str = value.ToString();

        if (str == "income")
           return new BitmapImage(...);

        if (str = "expenses")
           return new BitmapImage(...);

        return null;
    }

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

答案 1 :(得分:0)

我找到了我的答案的解决方案,即字符串的格式。这导致我无法在几小时的故障排除中检索图像。调试。我终于找到了解决办法:)

我这样解决:在我的converter.cs

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {

string str = (string)value;
string newString = str.TrimEnd();//Newly added compared with the old version

if (newString == "income")
   return new BitmapImage(new Uri("pack://application:,,,/images/add.png"));

if (newString == "Expenses")
{
    //return new BitmapImage(new Uri(@"pack://application:,,,/HouseWivesSavior;component/images/add.png"));
    return new BitmapImage(new Uri("pack://application:,,,/images/edit.png"));
}

return null;
}

从上面提到你可以看到我添加了这段代码:“string newString = str.TrimEnd();”

是因为我不希望字符串末尾有额外的空格。在插入数据库期间,我的代码如下所示:

  if (IncomeButton.IsChecked == true) {
                    CategoryType = IncomeButton.Content.ToString();
                }else{
                    CategoryType = ExpensesButton.Content.ToString();
                }

在运行期间,我发现为什么价值在“费用”而不是“费用”的格式中看起来很奇怪...因此我尝试使用最终部分的修剪看看&amp;答对了。我觉得它很有魅力。

我引用了这段视频,了解如何追踪价值:http://www.youtube.com/watch?v=evO3_xutDYI

感谢所有人回答我的问题&amp;抱歉浪费你的时间和努力解决我的问题:)祝大家好运祝你有愉快的一天。