Xamarin.Forms将SetBinding设置为Image,以便在Source更改时刷新

时间:2017-06-02 03:45:51

标签: c# xamarin.forms bindable

当我更改他们的ImageSource时,我试图在我的页面更新/重新绘制图像 - 这将帮助我让他们重新加载异步。

我认为绑定到图像的imageSource具有可绑定属性是一个开始,但它没有更新图像。我尝试了很多方法,包括一个带有OnPropertyChanged事件的viewModel方法,但我不认为我完全理解这一点。

这个绑定也必须在代码中完成,这就是应用程序的编写方式(最小的xaml)。

到目前为止,我的一般方法是:

可绑定属性

public static readonly BindableProperty ImageFileProperty = BindableProperty.Create("ImageProperty", typeof(string), typeof(CustomImageClass));

public string ImageProperty { get { return (string)GetValue(ImageFileProperty); } set { SetValue(ImageFileProperty, value); } }

CustomImageClass构造函数内部:

this.SetBinding(ImageFileProperty, "ImageProperty");

从这里开始,我希望在更新ImageSource并更改图像时更改图像。我希望这是足够具体的,我认为绑定到xaml的所有不同示例都让我感到困惑,因为我需要在代码中完成它。

1 个答案:

答案 0 :(得分:0)

  

抱歉英语不好

我想这里有很多问题......

如果我理解得很好,你想在CustomImageClass中创建一个BindableProperty。是对的吗? 如果是,那么您可以使用绑定属性名称的默认约定,如下所示(请注意我也更改了类型):

 protected void btnLogin_Click(object sender, EventArgs e)
    {
        using (SqlConnection con = new SqlConnection(Helper.GetCon()))
        {
            con.Open();
            SqlCommand cmd = new SqlCommand("SELECT su.SupplierID, su.Status, ut.Username, ut.Password, ut.UserID FROM UserTable ut INNER JOIN Suppliers su ON su.UserID = ut.UserID Where ut.Username = '" + txtUsername.Text + "' AND ut.Password = '" + Helper.CreateSHAHash(txtPassword.Text) + "'", con);

            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                while (dr.Read())
                {
                    Session["SupplierID"] = dr["SupplierID"].ToString();
                    Session["Status"] = dr["Status"].ToString();
                    Session["Username"] = dr["Username"].ToString();
                    Session["UserID"] = dr["UserID"].ToString();
                }

                string statuscode = Session["Status"].ToString();


                switch (statuscode)
                {
                    case "Active":
                        Session["Status"] = null;
                        Session.Remove("Status");
                        Response.Redirect("\\Account\\Suppliers\\Default.aspx");
                        break;

                    case "Inactive":

                        lblsource.Text = "Login Page: INACTIVE";
                        lblmessage.Text = "Welcome Back! Please let us know on how we can help you better.";

                        break;

                    case "Pending":
                        lblsource.Text = "Login Page: PENDING";
                        lblmessage.Text = "Thank you for registering with us. We will process your request shortly.";
                        lblsource.Visible = true;
                        lblmessage.Visible = true;


                        break;

                    case "Blocked":
                        lblsource.Text = "Login Page: BLOCKED";
                        lblmessage.Text = "We are so glad to hear from you. Please settle your account.";
                        lblsource.Visible = true;
                        lblmessage.Visible = true;

                        break;
                }

            }
            else
            {
                Label1.Visible = true;
            }




    }

您无法将绑定设置为刚刚在构造函数中创建的此属性。这将在您使用该类时使用(在xaml或c#中)。

现在你必须使用你的属性来设置你想要显示的图像。我认为你应该在这个类中有一个属性为Image类型的变量或私有属性,例如'image',所以,你应该在构造函数中做

public static readonly BindableProperty ImageFileProperty =
        BindableProperty.Create("ImageFile", typeof(ImageSource), 
        typeof(CustomImageClass));

public ImageSource ImageFile
{
    get{ return (string)GetValue(ImageFileProperty); }
    set{ SetValue(ImageFileProperty, value); }
}

请告诉我,如果我误解了。 我希望能帮助你。