我要做的是每次单击/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; }
}
,但仍然没有图像显示。
答案 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 。