不能在网格中使用 ObservableCollection 吗?

Can't use ObservableCollection in a Grid?

我目前正在使用 Xamarin 应用程序读取 RFID 温度标签并实时更新它们的值。当前设置使用两个 Horizo​​ntal StackLayouts,一个带有显示标签及其值列表的 ListView,另一个带有人体图像网格,我希望在上面(在特定位置)显示值。

在ListView端,我可以成功调用一个叫TagInfoList的对象,它是我从BasePage初始化调用的Class中的一个ObservableCollection。但是,在 Grid 端,我尝试了多种使用 TagInfoList 的方法,但它不起作用。我尝试了 BindableLayouts、DataTemplates + ViewCells,并且 none 允许我在第二个 StackLayout 中使用 TagInfoList。

这是两个水平 StackLayout 的 XAML 代码:

<StackLayout Orientation="Horizontal" HorizontalOptions="StartAndExpand">
          <ListView x:Name="liewViewTagData" ItemsSource="{Binding TagInfoList}" SelectedItem="{Binding objItemSelected, Mode=TwoWay}">
            <ListView.Header>
              <StackLayout BackgroundColor="#cccccc">
                <Grid>
                  <!-- Grid + Label code irrelevant to my issue-->
                </Grid>
              </StackLayout>
            </ListView.Header>

            <ListView.ItemTemplate>
              <DataTemplate>
                <ViewCell>
                  <StackLayout Orientation="Vertical">
                    <Grid>
                      <!-- Grid + Label code irrelevant to my issue-->
                    </Grid>
                  </StackLayout>
                </ViewCell>
              </DataTemplate>
            </ListView.ItemTemplate>
          </ListView>
        </StackLayout> <!-- RFID Tag Section -->

        <StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand"> <!-- Body Model Section -->
          <!-- HERE: WHAT TO PUT FOR TagInfoList TO BE USABLE? -->
          <Grid VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" WidthRequest="400" ColumnSpacing="0">
             <!-- Grid + Label + Images I want to use TagInfoList information in -->
          </Grid>
          <!-- HERE: WHAT TO PUT FOR TagInfoList TO BE USABLE? -->
        </StackLayout> <!-- Body Model Section -->
      </StackLayout>```

我删除了网格内部的大部分内容,因为它不相关。 TagInfoList 是一个 class 的 ObservableCollection,它包含我需要的所有数据(字符串和整数)。如何在第二个 StackLayout 中使用 TagInfoList?如果我使用与第一个 StackLayout 相同的方法,我会收到一个错误,提示我调用了 TagInfoList 两次(通过 'liewViewTagData' 项)。这是 .xaml.cs 文件中的代码:

liewViewTagData.ItemSelected += (sender, e) => {
                if (e.SelectedItem == null) return;     // Don't do anything if we just de-selected the row
                ((ListView)sender).SelectedItem = null; // De-select the row
            };

我的唯一目标是在两个 StackLayout 中使用 TagInfoList ObservableCollection,但我不确定该怎么做。

谢谢!

If I do it the same method as the first StackLayout, I get an error that I've called TagInfoList twice (through the 'liewViewTagData' item).

您可以按照第一个StackLayout的方式进行。您可以将两个列表视图的属性 x:Name更改为不同的Name

您可以参考以下代码:

     <ScrollView Orientation="Horizontal">
    <StackLayout Orientation="Horizontal" HorizontalOptions="StartAndExpand">

            <StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand">
                <ListView  x:Name="liewViewTagData" RowHeight="60" ItemsSource="{ Binding TagInfoList}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>

                                <!--other code-->

                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackLayout>

            <StackLayout Orientation="Horizontal" HorizontalOptions="EndAndExpand">
                <ListView  x:Name="liewView2" RowHeight="60" ItemsSource="{ Binding TagInfoList}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <ViewCell>

                                <!--other code-->
                                
                            </ViewCell>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </StackLayout>
        </StackLayout>
    </ScrollView>

注:

如果你运行出水平space,建议你在外层加一个ScrollView