簡體   English   中英

XAML 到 C# 代碼:將圖像綁定到 ListView

[英]XAML to C# Code: Binding Image to ListView

我正在嘗試通過隱藏的代碼在ListView綁定圖像。 目標是用C#編寫這部分代碼。 后台代碼中的綁定如何工作? 這是我的 xaml 代碼:

<ListView x:FieldModifier="public" x:Name="MyListView" HorizontalAlignment="Left" VerticalAlignment="Top" ItemsSource="{Binding ListViewDataList}">
    <ListView.View>
        <GridView x:Uid="GridViewTest">
            <GridViewColumn Header="Column1" DisplayMemberBinding="{Binding Column1Text}"/>
            <GridViewColumn Header="Column2">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <Image Width="50" Height="50" Source="{Binding Column2Img}"/>
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

Column1TextColumn2Img是屬性。 我試過這樣的事情:

GridView MyGridView = new GridView();

GridViewColumn gvc1 = new GridViewColumn();
gvc1.DisplayMemberBinding = new Binding("Column1Text");
gvc1.Header = "Column1";
MyGridView.Columns.Add(gvc1);

System.Windows.Controls.Image img = new System.Windows.Controls.Image();
img.Height = 50;
img.Width = 50;
img.Source = new Binding("Column2Img");

FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(StackPanel));
spFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
DataTemplate dt = new DataTemplate();
dt.VisualTree = spFactory;

GridViewColumn gvc2 = new GridViewColumn();
gvc2.Header = "Column2";
gvc2.CellTemplate = dt;
MyGridView.Columns.Add(gvc2);

MyListView.View = MyGridView;

但是后面代碼中的圖像綁定不起作用。

您應該綁定Source屬性而不是直接將其設置為Binding對象:

img.SetBinding(Image.SourceProperty, new Binding("Column2Img"));

但您還需要為添加到spFactoryImage元素創建FrameworkElementFactory

FrameworkElementFactory imgFactory = new FrameworkElementFactory(typeof(Image));
imgFactory.SetValue(Image.HeightProperty, 50.0);
imgFactory.SetValue(Image.WidthProperty, 50.0);
imgFactory.SetBinding(Image.SourceProperty, new Binding("Column2Img"));

FrameworkElementFactory spFactory = new FrameworkElementFactory(typeof(StackPanel));
spFactory.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
spFactory.AppendChild(imgFactory);

請注意,使用FrameworkElementFactory是一種不推薦使用的以編程方式創建模板的方法: https : //msdn.microsoft.com/en-us/library/system.windows.frameworkelementfactory(v=vs.110).aspx

以編程方式創建模板的推薦方法是使用XamlReader類的Load方法從string或內存流加載 XAML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM