Xamarin.forms Forms:当布局具有绑定上下文时,单独访问布局
我有一个布局,其中有几个元素可以进行布局绑定:Xamarin.forms Forms:当布局具有绑定上下文时,单独访问布局,xamarin.forms,Xamarin.forms,我有一个布局,其中有几个元素可以进行布局绑定: <Grid Grid.Column="1" RowSpacing="0"> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinit
<Grid Grid.Column="1" RowSpacing="0">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label
HorizontalOptions="Start"
VerticalOptions="End"
FontFamily="arial"
FontSize="18"
TextColor="#151515"
FontAttributes="Bold"
Grid.Row="0"
Text="{Binding title}"
/>
<Label
HorizontalOptions="Start"
VerticalOptions="Start"
FontFamily="arial"
FontSize="13"
TextColor="#151515"
Grid.Row="1"
Text="{Binding subtitle}"
/>
</Grid>
所以我给它多个对象,在同一个名称的变量上设置了不同的内容,结果所有的布局都被不同的内容膨胀了。那很好
但是,每个布局的右侧都有一个小通知图标:
<Grid Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ImageButton
VerticalOptions="Center"
HorizontalOptions="Center"
Source="img_notify.png"
Grid.Column="1"/>
<!-- BackgroundColor="#00000000"-->
<Label
HorizontalOptions="Center"
VerticalOptions="Center"
FontFamily="arial"
FontSize="18"
TextColor="#ffffff"
FontAttributes="Bold"
Grid.Column="1"
Text="!"
/>
</Grid>
看起来是这样的:
现在,一旦用户单击其中一个元素,通知按钮就应该消失,因为用户已经看到了它
因此,我建立了一个数据库,该数据库存储了广告的名称和副标题(如果单击),并且下次列表可见时,会检查每个对象:
private async void ReturnDataBaseToListAndUpdateNotifyButton(List<ListView_Matches> contentOfListView)
{
List<db_MatchesNotify_Type> contentOfDatabase = await Database.GetIDsAlreadyClickedOn();
foreach (var o in contentOfListView) // for each match in our list...
{
for(var i = 0; i < contentOfDatabase.Count; i++) //... check every object in our database if they match
{
if (o.title == contentOfDatabase[i].titleOfAd && o.userID == contentOfDatabase[i].userID) // check if matches then delete icon
{
}
}
}
}
private async void ReturnDataBaseToListAndUpdateNotifyButton(列表内容列表视图)
{
List contentOfDatabase=WAIT Database.GetIDsAlreadyClickedOn();
foreach(contentOfListView中的var o)//对于列表中的每个匹配项。。。
{
对于(var i=0;i
。。通过使用嵌套循环
现在我知道我的数据库工作正常,逻辑正常,但是在最后一个“if”语句中,没有发生任何事情,因为我现在不知道如何处理通知按钮
基本上,在IF中(如果列表中的数据与数据库中的数据匹配),我需要将notifybutton设置为不可见
但是1.)我无法按名称访问对象,因为列表中的属性没有传输到类,而是大多数:
2.)即使我只是将其设置为“不可见”,列表中的所有Notify按钮也将变得不可见。Ofc我只想要这个特殊的物体,在它上面发现了一个匹配项,它就不可见了
我需要访问的布局,已分别充气,并决定为每个新的按钮,现在无论它是可见或不可见
我怎样才能做到这一点
谢谢大家! 使用与设置
标签
s'绑定相同的方法进行操作。这个ImageButton
始终位于布局中,您只需使用绑定切换其IsVisible
属性即可
您没有在任何地方指定集合的绑定上下文,但我假设它是某种
IEnumerable
。在YourItemViewModel.cs
中,除了title
和subtitle
之外,您将拥有一个属性isnotifyicovisible
,这样您就可以根据需要将其设置为true
/false
。如果这是在列表视图中,您确实需要使用绑定。在模型中添加一个属性,该属性可以跟踪通知状态。我知道了,但假设绑定名为“notifybutton”。我需要能够从5个列表中访问say:notifybutton[2],并且只将这个设置为不可见。但我还没有在上面找到分子……是的,我明白了,问题更多的是listview的内容来自外部服务器。下载后,我会检查每一行的内容是否与本地数据库中的内容匹配。如果他们这样做了,我只想删除特定行上的nofify图标。但是数据之前已经设置好了,因为它来自外部服务器。因此:我需要在布局已经膨胀后单独访问每个图标…是的,你也可以这样做。绘制布局时,此新属性IsNotifyIconVisible
在任何地方都将为false。获取数据后,您将找到相应的YourItemViewModel
,并更新此属性。我假设在每个项目视图模型中,您都可以通过某种方式从集合中获取数据-很可能是通过ID?您需要使用来自该外部服务的数据更新您的模型/虚拟机-即,将数据合并在一起-您不需要在ListView中查找任何内容。你不能手动触摸布局。这就是为什么要使用ViewModel。每个item ViewModel将根据要更新的值更新UI。您需要像这样找到您的项目:var desiredItem=allItems.Where(x=>x.Id==serverId)
然后您只需像这样更改它的属性:desiredItem.isnotifyicovisible=true
gottit。我可以简单地检查每个对象的属性,并在设置之前将其与数据库进行比较。因此,只需将值设置为false或true:)