我创建了一个具有Image的View(BlankScreen),并在该视图的后面代码中创建了BindableProperty图标。
View的Xaml代码:
<ContentView
x:Class="Demo.CustomViews.BlankScreen"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<ContentView.Content>
<StackLayout>
<Label Text="Hello Xamarin.Forms!" />
<Image x:Name="image"/>
</StackLayout>
</ContentView.Content>
</ContentView>
View的背后代码:
public partial class BlankScreen : ContentView
{
public BlankScreen ()
{
InitializeComponent ();
}
public static readonly BindableProperty IconProperty =
BindableProperty.Create(nameof(Icon), typeof(ImageSource), typeof(BlankScreen), null);
public ImageSource Icon
{
get => (ImageSource)GetValue(IconProperty);
set => SetValue(IconProperty, value);
}
}
然后我将此视图用于Page,所以我将此视图包括在BindableProperty图标中。
<customviews:BlankScreen Icon="chat" />
但是问题是聊天图标无法在从父页面的视图传递过来的视图上设置。
那我该如何解决这个问题,请帮忙?
答案 0 :(得分:0)
我认为它不起作用的原因是您似乎没有对其进行设置
您的可绑定属性应如下所示:
public static readonly BindableProperty IconProperty =
BindableProperty.Create(nameof(Icon), typeof(ImageSource), typeof(BlankScreen), null, propertyChanged: IconChanged);
public ImageSource Icon
{
get => (ImageSource)GetValue(IconProperty);
set => SetValue(IconProperty, value);
}
完成此操作后,添加以下方法并更新图片:
private static void IconChanged(BindableObject bindable, object oldValue, object newValue)
{
BlankScreen screen= bindable as BlankScreen ;
screen.image.Source= newValue.ToString();
}
如有查询,请告诉我
答案 1 :(得分:0)
我发现BlankScreen中有图像,但是您没有为其设置源。我为此图像绑定了图标。
<ContentView.Content>
<StackLayout>
<Label Text="Hello Xamarin.Forms!" />
<Image x:Name="image" Source="{Binding Icon}" />
</StackLayout>
</ContentView.Content>
然后创建propertyChanged事件:
public partial class BlankScreen : ContentView
{
public static readonly BindableProperty IconProperty =
BindableProperty.Create(nameof(Icon), typeof(ImageSource), typeof(BlankScreen), defaultBindingMode: BindingMode.TwoWay,
propertyChanged: (bindable, oldVal, newVal) =>
{
var page = (BlankScreen)bindable;
page.image.Source = (ImageSource)newVal;
});
public ImageSource Icon
{
get => (ImageSource)GetValue(IconProperty);
set => SetValue(IconProperty, value);
}
public BlankScreen ()
{
InitializeComponent ();
}
}
最后,我在Contentpage中使用此自定义视图。
<ContentPage.Content>
<StackLayout>
<customview:BlankScreen Icon="a1.jpg" />
</StackLayout>
</ContentPage.Content>
它工作正常。