通过BindableCollection使用MVVM在WPF中添加图像

时间:2019-07-09 14:55:35

标签: c# wpf mvvm

我要做的是每次单击/authentication中的StackPanel上的添加按钮时添加图像。我尝试使用以下代码中所示的BindableCollection

ItemsControl

虽然我尝试跟踪输出,但没有显示任何内容,但似乎没有问题。

这是我的ViewModel类:

<ItemsControl x:Name="Tickets">

    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding ImageTicket,diag:PresentationTraceSources.TraceLevel=High}" Stretch="None" HorizontalAlignment="Left" Width="100"/>
            </StackPanel>
        </DataTemplate>   
    </ItemsControl.ItemTemplate>
</ItemsControl>

这是我的模型课:

class POSViewModel : Screen
{   
    public BindableCollection<TicketModel> Tickets { get; set; }

    public POSViewModel()
    {

        Tickets = new BindableCollection<TicketModel>();
    }



    public void ManBtn()
    {
        TicketModel Ticket = new TicketModel
        {
            CategorieEnum = CategorieEnum.man,
            ImageSource = "/Assets/Icons/man.png",
            Prix = 10,
            TicketId = 0
        };
        Tickets.Add(Ticket);

    }
}

PS::我正在使用Caliburn.micro框架。

Edit1:我也尝试绑定class TicketModel { private int ticketId; private CategorieEnum catégorieName; private float prix; private string imageSource; private Image imageTicket; public Image ImageTicket { get { Image Img = new Image(); Img.Source = new BitmapImage(new Uri(imageSource, UriKind.Relative)); return Img; } set { ImageTicket = value; } } public int TicketId { get; set; } public CategorieEnum CategorieEnum { get; set; } public float Prix { get; set; } public string ImageSource { get; set; } } ,但仍然没有图像显示。

2 个答案:

答案 0 :(得分:1)

请使用以下可能有用的代码,但使用self.ah = symbols("a_H1={:d}".format(n + 1)) INotifyPropertyChanged

ObservableCollction

视图模型被修改为:

<ItemsControl ItemsSource="{Binding Tickets}" x:Name="RecipeItemControl" Height="100">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Image Source="{Binding Path=ImageSource}"></Image>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

答案 1 :(得分:0)

您的ImageTicket属性声明错误。它应该返回一个ImageSource:

public ImageSource ImageTicket
{
    get { return new BitmapImage(new Uri(ImageSource, UriKind.Relative)); }
}

setter没有任何意义,因为它只做递归调用而已。

整个属性可能是多余的,因为由于内置的​​自动类型转换,您还可以直接绑定到ImageSource属性:

<Image Source="{Binding ImageSource}"/>

但是请注意,如果您在后面的代码中使用Resource File Pack URI,则应使用全前缀:

ImageSource = "pack://application:,,,/Assets/Icons/man.png",

,并且图像文件的Build Action应该设置为 Resource