首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MAUI绑定ObservableCOllection<string>到ListView抛出System.Runtime.InteropServices.COMException

MAUI绑定ObservableCOllection<string>到ListView抛出System.Runtime.InteropServices.COMException
EN

Stack Overflow用户
提问于 2022-06-11 00:02:09
回答 1查看 811关注 0票数 2

在我的页面中添加一个ListView将引发运行时异常,当我试图使用Shell.Current.Navigation.PushModalAsync(new CollectionItemDetails(item));导航到该页面时,我想知道我是否以某种方式修改了XAML,或者我的绑定是否关闭,因为删除列表视图可以防止异常发生。

列表视图XAML参见Listview在底部

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="CollectionItemDetails"
             xmlns:ViewModels="clr-namespaceViewModels"
             Title="{Binding Item.Name}">
    <ContentPage.BindingContext>
        <ViewModels:CollectionItemDetailsViewModel/>
    </ContentPage.BindingContext>
    <StackLayout>

        <!--Header Display-->
        <FlexLayout HorizontalOptions="{OnPlatform WinUI=Start, Default=Center}"
                    VerticalOptions="Fill"
                    Wrap="Wrap">

            <!--Image-->
            <Frame CornerRadius="45"
                   HeightRequest="300"
                   WidthRequest="300"
                   HasShadow="False">
                <Image Source="{Binding Item.Image}"
                       HeightRequest="300"
                       MinimumWidthRequest="300"
                       Margin="-20"
                       Aspect="AspectFill"/>
            </Frame>

            <StackLayout HorizontalOptions="{OnPlatform WinUI=StartAndExpand, Default=Center}">
                <Label Text="{Binding Item.Name}"
                       FontSize="{OnPlatform WinUI=Header, Default=Title}"
                       FontAttributes="Bold"
                       HorizontalOptions="Center"/>               
                <Grid ColumnSpacing="50"
                      HorizontalOptions="Center">
                    
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>

                    <!--PlayerCount-->
                    <HorizontalStackLayout Grid.Column="0"
                                           HorizontalOptions="Start">
                        <Label VerticalOptions="Center"  FontSize="Small">
                            <Label.FormattedText>
                                <FormattedString>
                                    <Span Text="{Binding Item.MinPlayers}"/>
                                    <Span Text="-"/>
                                    <Span Text="{Binding Item.MaxPlayers}"/>
                                </FormattedString>
                            </Label.FormattedText>
                        </Label>
                        <Image x:Name="PlayerCountIMG" 
                               Source="{AppThemeBinding Light=players.png, Dark=playerswhite.png}" 
                               HeightRequest="30" WidthRequest="30"/>
                    </HorizontalStackLayout>

                    <!--Playtime-->
                    <HorizontalStackLayout Grid.Column="1"
                                           HorizontalOptions="Center">
                        <Label VerticalOptions="Center" FontSize="Small" Text="{Binding Item.PlayTime}"/>
                        <Image Source="clock.png" HeightRequest="30" WidthRequest="30"/>
                    </HorizontalStackLayout>

                    <!--Age-->
                    <HorizontalStackLayout Grid.Column="2" 
                                           HorizontalOptions="End">
                        <Label VerticalOptions="Center" FontSize="Small">
                            <Label.FormattedText>
                                <FormattedString>
                                    <Span Text="{Binding Item.MinAge}"/>
                                    <Span Text="+"/>
                                </FormattedString>
                            </Label.FormattedText>
                        </Label>
                        <Image Source="{AppThemeBinding Light=age.png, Dark=agewhite.png}" HeightRequest="30" WidthRequest="30"/>
                    </HorizontalStackLayout>

                    <Label Grid.Column="3"
                           VerticalOptions="Center">
                        <Label.FormattedText>
                            <FormattedString>
                                <Span Text="Weight: " 
                                      FontAttributes="Bold"/>
                                <Span Text="{Binding Item.Statistics.Ratings.AverageWeights.Value, StringFormat='{0:F2}'}"
                                      TextColor="Orange"
                                      FontAttributes="Bold"/>                                
                            </FormattedString>
                        </Label.FormattedText>
                    </Label>
                </Grid>
                
                <!--Publishers  This is causing the breakage-->
                <ListView BindingContext="{Binding Publishers}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <TextCell Text="{Binding}"/>                       
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
                <!--<ListView BindingContext="{Binding Source={RelativeSource Self}, Path=Item.Publishers}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <Label Text="{Binding .}"/>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>-->
            </StackLayout>
        </FlexLayout>

        <Label Text="{Binding Item.Description}"
               TextType="Html"/>
    </StackLayout>
</ContentPage>

代码在中的应用

代码语言:javascript
运行
复制
public partial class CollectionItemDetails : ContentPage
{
    public ICollectionItemDetailsViewModel itemViewModel;

    public CollectionItemDetails(CollectionPageItem item)
    {
        InitializeComponent();
        Init(item);
    }

    private void Init(CollectionPageItem item)
    {
        itemViewModel = BootStrapper.Resolve<ICollectionItemDetailsViewModel>(new[] { new NamedParameter("item", item) });
        BindingContext = itemViewModel;
    }
}

ViewModel

代码语言:javascript
运行
复制
public class CollectionItemDetailsViewModel : ViewModelBase, ICollectionItemDetailsViewModel
    {
        public CollectionItemDetailsViewModel()
        {
        }

        public CollectionItemDetailsViewModel(CollectionPageItem item)
        {
            Item = item;
            Publishers = Item.Publishers.ToObservableCollection();
        }
    
        public CollectionPageItem Item { get; private set; }

        private ObservableCollection<string> _publishers = new();

        public ObservableCollection<string> Publishers
        { 
            get => _publishers;
            private set { _publishers = value; OnPropertyChanged(nameof(Publishers)); }
        }
    }

我最初试图将ListView绑定到Item.Publishers属性(这是一个IList<string> ),但由于异常,我试图将该属性公开为ObservableCollection<string>,尽管这个页面实际上并不需要监视更改。不幸的是,还是有例外。

异常详细信息

代码语言:javascript
运行
复制
System.Runtime.InteropServices.COMException
  HResult=0x88000FA8
  Message=0x88000FA8
  Source=WinRT.Runtime
  StackTrace:
   at WinRT.ExceptionHelpers.<ThrowExceptionForHR>g__Throw|20_0(Int32 hr)
   at ABI.Microsoft.UI.Xaml.Controls.INavigationView2.global::Microsoft.UI.Xaml.Controls.INavigationView2.set_PaneDisplayMode(NavigationViewPaneDisplayMode value)
   at Microsoft.UI.Xaml.Controls.NavigationView.set_PaneDisplayMode(NavigationViewPaneDisplayMode value)
   at Microsoft.Maui.Controls.Handlers.ShellItemHandler.MapTabBarIsVisible(ShellItemHandler handler, ShellItem item)
   at Microsoft.Maui.Controls.Shell.SendNavigated(ShellNavigatedEventArgs args)
   at Microsoft.Maui.Controls.Shell.<.ctor>b__169_0(Object _, ShellNavigatedEventArgs args)
   at Microsoft.Maui.Controls.ShellNavigationManager.<>c__DisplayClass15_0.<HandleNavigated>g__FireNavigatedEvents|1(ShellNavigatedEventArgs a, Shell shell)
   at Microsoft.Maui.Controls.ShellNavigationManager.<>c__DisplayClass15_0.<HandleNavigated>b__0()
   at Microsoft.Maui.Controls.Page.OnAppearing(Action action)
   at Microsoft.Maui.Controls.BaseShellItem.OnAppearing(Action action)
   at Microsoft.Maui.Controls.ShellNavigationManager.HandleNavigated(ShellNavigatedEventArgs args)
   at Microsoft.Maui.Controls.ShellNavigationManager.<GoToAsync>d__14.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.Maui.Controls.ShellSection.NavigationImpl.<OnPushModal>d__8.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.Maui.Controls.Shell.NavigationImpl.<OnPushModal>d__11.MoveNext()
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at ..\.CollectionViewModel.<ItemTapped>d__17.MoveNext() in C:\ViewModels\CollectionViewModel.cs:line 114
EN

回答 1

Stack Overflow用户

发布于 2022-06-11 02:23:46

<TextCell Text="{Binding}"/>看上去像个打字错误。这是无效的语法。

你可能是说:

<TextCell Text="{Binding .}"/>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72580776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档