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:)