我正在使用MVVM模式开发应用程序。绑定工作正常,但是当我在Android设备上调试我的应用程序时(我没有在iOS部分登录),我有以下日志:
绑定:' propertyName'未在' Xamarin.Forms.ResourceDictionary'上找到的属性,目标属性:' typeOfpropertyName'。
我不必在我的课程中实现INotifyPropertyChanged界面,因为它取决于我的需要。例如,我有一个带有DataTemplate的ListView(一个CustomViewCell)和一个ItemSource(用一个包含多个MyObject的List绑定):
CustomViewCell:
<ViewCell>
<ViewCell.BindingContext>
<ResourceDictionary>
<local:Converter x:Key="converter"/>
</ResourceDictionary>
</ViewCell.BindingContext>
<Grid>
<Grid.Resources>
<ResourceDictionary>
<local:Converter x:Key="converter"/>
</ResourceDictionary>
</Grid.Resources>
<Image
Source="{Binding PictureImageSource}"/>
<Image
Source="{Binding User, Converter={StaticResource converter}}"/>
</Grid>
</ViewCell>
MyObject.cs:
public ImageSource PictureImageSource
{
get
{
return ImageSource.FromUri(new Uri(MyUrl));
}
}
public User User
{
get;
set;
}
使用该代码我有以下日志:
绑定:&#39; PictureImageSource&#39;找不到&#39; Xamarin.Forms.ResourceDictionary&#39;,目标属性:&#39; Xamarin.Forms.Image.Source&#39;
绑定:&#39;用户&#39;未在&#39; Xamarin.Forms.ResourceDictionary&#39;上找到的属性,目标属性:&#39; Xamarin.Forms.Image.Source&#39;
我重复一切正常但我真的想删除这些日志。有什么想法吗?
答案 0 :(得分:1)
我不知道我是否理解得很清楚,但如果我这样做,你只需要将资源字典更改为网格,例如。
见这个例子:
<ViewCell>
<Grid>
<Grid.Resources>
<ResourceDictionary>
<local:Converter x:Key="converter"/>
</ResourceDictionary>
</Grid.Resources>
<Image
Source="{Binding PictureImageSource}"/>
<Image
Source="{Binding User, Converter={StaticResource converter}}"/>
</Grid>
</ViewCell>
让我知道它是否适合你。
答案 1 :(得分:1)
这条线在这里做什么:
PUNCTUATION = '''!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~'''
WHITE_SPACE = ' \t\n\r\v\f'
EXTRANEOUS = PUNCTUATION + WHITE_SPACE
str = ["HeLlo!!!,","H%I"]
l = []
for s in str:
for x in EXTRANEOUS:
sd = s.replace(x,"")
l.append(sd)
print(l)
理想情况下,应该有一个包含<ViewCell.BindingContext>
<ResourceDictionary>
<local:Converter x:Key="converter"/>
</ResourceDictionary>
</ViewCell.BindingContext>
List<MyObject>
,BindingContext
ItemSource
应绑定到ListView
,如下所示:
在ViewModel中:
List<MyObject>
然后在xaml文件中public List<MyObject> Objects {get; set;}
:
ListView
资源字典应该在元素级别,页面级别或应用程序级别。不在ViewCell的绑定上下文中。 ViewCell不应该有绑定上下文,因为它只是ListView的模板。
在你的情况下:
ItemsSource="{Binding Objects}"
希望这有帮助。