1

我放弃了我的代码错误,所以我决定在这里写。我真的希望得到一个解决方案。我想要的列表框是:当我单击按钮时,它将从数据库中检索数据,然后将其加载到列表框中。它工作得很好。但是当我添加 wpf 样式时,它开始出现问题,因为我想将图像添加到文本旁边的每个项目中 - 图像(右侧)和文本(左侧)。列表框中的结果是空白的,但实际上似乎有一个数据列表 - 请看图片。我可能在我的代码或 wpf 中做错了什么。我不确定是什么问题....如果您可以查看我的代码,我将不胜感激。您给定的代码会很有帮助。非常感谢!

WPF:

    <ListBox Name="lstDinner" DisplayMemberPath="Name" Margin="513,85,608,445" Style="{DynamicResource ResourceKey=styleListBox}"/>

WPF 样式:

 <DataTemplate x:Key="templateListBoxItem">
    <Grid Margin="5">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Border Grid.Column="0"
                Grid.Row="0"
                Grid.RowSpan="2"
                Margin="0,0,10,0">
            <Image Source="{Binding Path=Image}"
                   Stretch="Fill"
                   Height="40"
                   Width="40"></Image>
        </Border>
        <TextBlock Text="{Binding Path=Name}"
                   FontWeight="Bold"
                   Grid.Column="1"
                   Grid.Row="0"></TextBlock>
        <TextBlock Text="{Binding Path=About}"
                   Grid.Column="1"
                   Grid.Row="1"></TextBlock>
    </Grid>
</DataTemplate>

<Style x:Key="styleListBox" TargetType="{x:Type ListBox}">
    <Setter Property="ItemTemplate" Value="{StaticResource ResourceKey=templateListBoxItem}"></Setter>
</Style>

C#:

   private void Button_Click(object sender, RoutedEventArgs e)
    {
        _dinnerExtractor = new DinnerExtractor();
        const int oneDay = 1;

        _databaseDinnerList = new ObservableCollection<FoodInformation>(_dinnerExtractor.GetDinnerDays(oneDay));

        if (_databaseDinnerList != null)
        {
            foreach (var list in _databaseDinnerList)
            {

                lstDinner.Items.Add(new FoodInformation { Dinner = list.Dinner, DinnerImage = list.DinnerImage});
            }

            //lstDinner.ItemsSource = _databaseDinnerList;
        }
    }

在此处输入图像描述

4

1 回答 1

1

FoodInformation类不包含属性:ImageName(您正在尝试绑定到 中的这些属性DataTemplate)。

从代码隐藏中,我们可以创建FoodInformation具有属性Dinner和的类的定义DinnerImage

class FoodInformation
{
    public string Dinner { get; set; }
    public ImageSource DinnerImage { get; set; }
}

所以你应该绑定到属性DinnerDinnerImage,而不是ImageName

如果您更改DataTemplate适当的属性名称,一切都会好起来的。

<DataTemplate x:Key="templateListBoxItem">
    <Grid Margin="5">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <Border Grid.Column="0"
                Grid.Row="0"
                Grid.RowSpan="2"
                Margin="0,0,10,0">
            <Image Source="{Binding Path=DinnerImage }"
                   Stretch="Fill"
                   Height="40"
                   Width="40"></Image>
        </Border>
        <TextBlock Text="{Binding Path=Dinner }"
                   FontWeight="Bold"
                   Grid.Column="1"
                   Grid.Row="0"></TextBlock>
    </Grid>
</DataTemplate>
于 2013-07-10T19:17:23.513 回答