【发布时间】:2017-01-19 05:00:02
【问题描述】:
我有一个问题,我搜索了一个解决方案。幸运的是,我发布了很多关于它的帖子,但我对找到的解释感到迷茫。 initale 问题来自personal project about the polyline of the Xamarin.Forms.Map,其中初始化是通过来自 XAML 部分的绑定实现的..
举个例子说明一下:
我有一个对象 CustomMap.cs,它继承自 Xamarin.Forms.Map(此文件位于 PCL 部分 -> CustomControl/CustomMap.cs)
public class CustomMap : Map, INotifyPropertyChanged
{
public static readonly BindableProperty PolylineAddressPointsProperty =
BindableProperty.Create(nameof(PolylineAddressPoints), typeof(List<string>), typeof(CustomMap), null);
public List<string> PolylineAddressPoints
{
get { return (List<string>)GetValue(PolylineAddressPointsProperty); }
set
{
SetValue(PolylineAddressPointsProperty, value);
this.GeneratePolylineCoordinatesInner();
}
}
// ...
}
因此,页面的 Xaml 部分(调用该控件的位置)如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:control="clr-namespace:MapPolylineProject.CustomControl;assembly=MapPolylineProject"
x:Class="MapPolylineProject.Page.MainPage">
<ContentPage.Content>
<control:CustomMap x:Name="MapTest" PolylineAddressPoints="{Binding AddressPointList}"
VerticalOptions="Fill" HorizontalOptions="Fill"/>
</ContentPage.Content>
</ContentPage>
Csharp部分:
public partial class MainPage : ContentPage
{
public List<string> AddressPointList { get; set; }
public MainPage()
{
base.BindingContext = this;
AddressPointList = new List<string>()
{
"72230 Ruaudin, France",
"72100 Le Mans, France",
"77500 Chelles, France"
};
InitializeComponent();
//MapTest.PolylineAddressPoints = AddressPointList;
}
}
所以,如果我从对象实例编辑PolylineAddressPoints,一切都很好(如果注释部分没有被注释..),但是如果我从 XAML 中初始化值(从InitializeComponent();),它不起作用,SetValue,在Set {},没有被调用..
然后我在网上搜索了它并获得了一些关于 依赖属性? 或类似的东西。所以我尝试了一些解决方案,但是,来自 WPF,所以一些方法,比如DependencyProperty.Register();。所以是的,我找不到解决问题的方法..
我也想到了一些事情,如果DependencyProperty.Register(); 将存在于 Xamarin.Forms 中,那么这意味着我必须为每个值都这样做吗?因为,如果每个值都必须由 XAML 绑定逻辑 设置,那将无法正常工作,我必须注册每个值,不是吗?
如果我不清楚,我很抱歉,但我对这个问题很迷茫。请不要犹豫,询问更多细节,提前谢谢!
【问题讨论】: