WPF ListBox 控件绑定 Binding

本文介绍了如何在WPF应用中利用ListBox进行数据绑定,展示循环列表内容并实现模板化。通过设置ItemsSource和ItemTemplate,结合DataContext和ObservableCollection动态加载图片和信息。同时展示了当选中项变化时,如何更新底部的显示内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们需要用到循环的列表内容,并且模板化程度高的时候,建议使用 ListBox 来做绑定。
在这里插入图片描述
XAML:

<Window.DataContext>
    <local:VMTempTest/>
</Window.DataContext>
<StackPanel Margin="10,0,0,50" Orientation="Vertical" >
    <TextBlock Text="ListBox 模板" FontWeight="Bold"  Margin="0,5,0,5" ></TextBlock>
    <DockPanel >
        <StackPanel HorizontalAlignment="Left" DockPanel.Dock="Top" >
            <ListBox x:Name="lb" ItemsSource="{Binding ListBoxData}" BorderThickness="0" >
                <ListBox.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapPanel Width="{Binding ActualWidth,RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"/>
                    </ItemsPanelTemplate>
                </ListBox.ItemsPanel>

                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Image Source="{Binding Img}" Width="96" Height="96"/>
                            <TextBlock HorizontalAlignment="Center" FontSize="16" Text="{Binding Info}"/>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>

        <StackPanel DockPanel.Dock="Bottom" DataContext="{Binding SelectedItem,ElementName=lb}" Margin="15 30 0 0" HorizontalAlignment="Left" Orientation="Vertical" >
            <TextBlock Text="{Binding Info,StringFormat='选中:\{0\}'}" ></TextBlock>
        </StackPanel>
    </DockPanel>
</StackPanel>

ViewModel:

public class VMTempTest : ViewModelBase
{
    public VMTempTest()
    {
        ListBoxData = new ObservableCollection<dynamic>(){
          new { Img="/MyWpfApp;component/Images/1.jpg",Info="樱桃" },
          new { Img="/MyWpfApp;component/Images/2.jpg",Info="葡萄" },
          new { Img="/MyWpfApp;component/Images/3.jpg",Info="苹果" },
          new { Img="/MyWpfApp;component/Images/4.jpg",Info="猕猴桃" },
          new { Img="/MyWpfApp;component/Images/5.jpg",Info="柠檬" },
       };
    }

    private IEnumerable listBoxData;
    /// <summary>
    /// LisBox数据模板
    /// </summary>
    public IEnumerable ListBoxData
    {
        get { return listBoxData; }
        set { listBoxData = value; RaisePropertyChanged(() => ListBoxData); }
    }
}

https://blog.51cto.com/u_15698411/5661564

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值