WPF ListBox 控件綁定 Binding


當我們需要用到循環的列表內容,並且模板化程度高的時候,建議使用 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); }
    }
}

注意:要將放圖片的 Images 文件件包含到項目中來。Img="/MyWpfApp;component/Images/1.jpg" 這個初始化路徑也可以簡化成 Img="/Images/1.jpg"





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM