C# Xamarin将图像添加到StackLayout OnChange

C# Xamarin将图像添加到StackLayout OnChange,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我有个问题。我有一个标签页,有第1页和第2页。第2页是一个网格,其中有一些图像。单击图像时,我将图像添加到集合中,因此在第1页上使用OnChange。 在第1页,我想将新图像添加到该页的StackLayout中 以下是我目前的代码: 这是第2页代码: private void LoadTemplateList() { string[] imageArray = { "Good_Question.png", "Excuse_Me.png"}; int imageIndex = 0;

我有个问题。我有一个标签页,有第1页和第2页。第2页是一个网格,其中有一些图像。单击图像时,我将图像添加到集合中,因此在第1页上使用OnChange。 在第1页,我想将新图像添加到该页的StackLayout中

以下是我目前的代码: 这是第2页代码:

private void LoadTemplateList()
{
    string[] imageArray = { "Good_Question.png", "Excuse_Me.png"};
    int imageIndex = 0;
    for (var i = 0; i <= TemplateGrid.RowDefinitions.Count; i++)
    {
        if (i == 2)
        {
            for (var j = 0; j < TemplateGrid.ColumnDefinitions.Count; j++)
            {
                if (j == 1 || j == 3)
                {
                    Image image = new Image { Source = imageArray[imageIndex], VerticalOptions = LayoutOptions.StartAndExpand };

                    var SelectImage = new TapGestureRecognizer();
                    SelectImage.Tapped += AddImageToCollection(image);
                    image.GestureRecognizers.Add(SelectImage);

                    TemplateGrid.Children.Add(image,j,i);
                    imageIndex++;
                }
            }
        }
    }
}

private EventHandler AddImageToCollection(Image image)
{
    HomePage.SelectedImageCollection.Add(image);
    return null;
}
private void LoadTemplateList()
{
string[]imageArray={“Good_Question.png”,“请问.png”};
int-imageIndex=0;

对于(var i=0;i我认为您希望在第1页收到关于添加新图像的通知

如果是这种情况,则必须向HomePage.SelectedImageCollection.CollectionChanged添加事件处理程序,因此:

public MemeBuilder()
{
   InitializeComponent();

   SizeChanged += (s, a) =>
   {
       myLayout.HeightRequest = this.Width;
       myLayout.WidthRequest = this.Width;
   };

   HomePage.SelectedImageCollection.CollectionChanged += AddImageToPreview;
}

private void AddImageToPreview(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
           if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
           {
               var image = (Image)e.NewItems[e.NewItems.Count - 1];
           }
   ....
}

observedcollection
有一个
Add
方法,你试过了吗?它还有一个构造函数,允许用另一个
observedcollection的内容初始化它的内容
是的,我可能知道如何实现我想要的,但是如果出现错误,请将签名更改为:
private void AddImageToCollection(Image Image)
我在问题中扩展了第2页的代码,因为手势识别器似乎不工作,因为它从未点击
AddImageToPreview()
…有什么想法吗?SelectImage.Tapped需要一个签名为“`` public void NameOfMethod”(对象发送方,EventArgs e)的事件处理程序
。在这种情况下,您可以使用
SelectImage.Command=new命令((image)=>AddImageToCollection(image))``并更改``private void AddImageToCollection(image image)````无法在此作用域中声明名为“image”的局部或参数,因为该名称在封闭的局部作用域中用于定义局部或参数“?在第1页的这一行中,图像为空:
var image=(image)e.NewItems[e.NewItems.Count-1];
,因为在这一行之后,我有以下内容:
myLayout.Children.Add(image);
,但这会导致图像为空的错误,即图像为空SelectImage.Command=new命令((I)=>AddImageToCollection(I));SelectImage.CommandParameter=image;我忘了告诉您CommandParameter