我有一个应用程序,我列出了一些项目,然后更改为另一个页面进行编辑.在编辑页面中,我有一些字段,我需要从列表中选择一个值,我在另一个页面中加载.我从编辑页面调用列表页面,从编辑页面视图模型传递一个方法,以便在进行选择时调用,以便我可以更新我的模型和绑定.
问题是,有时候,当返回到编辑页面时,调试器会在生成的文件App.g.i.cs中打破
"Error HRESULT E_FAIL has been returned from a call to a COM component." exception.
我通过将其替换为虚拟页面并删除编辑页面设置的任何回调,从值列表的异步加载中排除了可能的错误.错误仍然发生.
编辑页面的导航缓存模式设置为必需,因此我不会丢失以前的更改.我尝试没有所需的缓存模式,仍然得到错误.
似乎解决这个问题的唯一一件事就是我从编辑页面xaml中删除了使用自定义转换器的绑定,但我在其他页面中有那些并且从未遇到过问题. (见更新)
#if DEBUG && !disABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION UnhandledException += (sender,e) => { if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break(); };
这是编辑页面的xaml:
<Page.Resources> <converters:BooleanToVisibilityConverter x:Key="BoolToVisibility" /> <converters:StringFormatConverter x:Key="StringFormat" /> <converters:DateTimetoDateTimeOffsetConverter x:Key="DateOffset" /> <converters:DateTimetoTimeSpanConverter x:Key="TimeSpan" /> </Page.Resources> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.ColumnDeFinitions> <ColumnDeFinition Width="*" /> </Grid.ColumnDeFinitions> <Grid.RowDeFinitions> <RowDeFinition Height="auto" /> <RowDeFinition Height="auto" /> <RowDeFinition Height="*" /> </Grid.RowDeFinitions> <fieldSelectControl:BackButtonAndTitle Title="Page Title" /> <StackPanel Grid.Row="1" Orientation="Horizontal"> <Button Name="HomeButton" Width="70" Height="50" Background="Black" Content="" FontFamily="Segoe MDL2 Assets" FontSize="30" /> <TextBlock Name="PageTitle" FontSize="36" Text="{Binding OrderTitle}" /> </StackPanel> <ProgressRing Grid.Row="2" IsActive="{Binding IsLoading}" /> <ScrollViewer Grid.Row="2" Height="Auto" HorizontalScrollBarVisibility="disabled" VerticalScrollBarVisibility="Auto" Visibility="{Binding Path=FinishedLoading,Converter={StaticResource BoolToVisibility}}"> <StackPanel Margin="20,10,20,30"> <TextBlock Margin="0,5,5" Style="{StaticResource DetailLabel}" Text="Date" /> <DatePicker Date="{Binding Day,Mode=TwoWay,Converter={StaticResource DateOffset}}" /> <TextBlock Margin="0,15,5" Style="{StaticResource DetailLabel}" Text="Type" /> <ComboBox ItemsSource="{Binding Combovalues}" SelectedItem="{Binding SelectedHourType,Mode=TwoWay}" /> <TextBlock Margin="0,5" Style="{StaticResource DetailLabel}" Text="Start" /> <TimePicker ClockIdentifier="24HourClock" Time="{Binding StartTime,Converter={StaticResource TimeSpan}}" /> <TextBlock Margin="0,5" Style="{StaticResource DetailLabel}" Text="End" /> <TimePicker ClockIdentifier="24HourClock" Time="{Binding EndTime,5" Style="{StaticResource DetailLabel}" Text="Amount" /> <TextBox InputScope="Number" Text="{Binding HValue,Mode=TwoWay}" /> <fieldSelectControl:FieldWithIconSelector x:Name="fsSelect" IconClickedEvent="btnClose_Click" IconField="" TitleField="Add..." TitleIconField="" ValueField="" /> <ScrollViewer Height="Auto" HorizontalScrollBarVisibility="disabled" VerticalScrollBarVisibility="Auto"> <ListView x:Name="lstOrders" Height="auto" MaxHeight="600" HorizontalAlignment="Stretch" IsItemClickEnabled="True" ItemClick="lstOrders_ItemClick" ItemsSource="{Binding SelectedEmployees,Mode=OneWay}"> <ListView.ItemTemplate> <DataTemplate x:DataType="data:Responsible"> <fieldSelectControl:FieldWithIconSelector x:Name="fsEmployees" IconClickedEvent="fsEmployees_IconClickedEvent" IconField="" TitleField="" TitleIconField="" ValueField="{Binding Name}" /> </DataTemplate> </ListView.ItemTemplate> <ListView.ItemContainerStyle> <Style targettype="ListViewItem"> <Setter Property="HorizontalContentAlignment" Value="Stretch" /> </Style> </ListView.ItemContainerStyle> </ListView> </ScrollViewer> <Button Name="btnSave" Margin="0,15" HorizontalAlignment="Stretch" Click="btnSave_Click" Visibility="{Binding Path=FinishedSaving,Converter={StaticResource BoolToVisibility}}"> <Button.Template> <ControlTemplate> <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#0099cc" Orientation="Vertical" Padding="5"> <TextBlock HorizontalAlignment="Center" FontFamily="Segoe MDL2 Assets" FontSize="25" Text="" /> <TextBlock HorizontalAlignment="Center" Text="Save" /> </StackPanel> </ControlTemplate> </Button.Template> </Button> </StackPanel> </ScrollViewer> </Grid>
DateOffset转换器的代码:
public class DateTimetoDateTimeOffsetConverter : IValueConverter { public object Convert(object value,Type targettype,object parameter,string language) { try { if (value is DateTime) { DateTime date = (DateTime)value; return new DateTimeOffset(date); } else return new DateTimeOffset(DateTime.Now); } catch (Exception ex) { return new DateTimeOffset(DateTime.Now); } } public object ConvertBack(object value,string language) { DateTimeOffset dto = (DateTimeOffset)value; return dto.DateTime; } }
TimeOffset转换器的代码:
public class DateTimetoTimeSpanConverter : IValueConverter { public object Convert(object value,string language) { try { if (value is DateTime) { DateTime date = (DateTime)value; return new TimeSpan(date.Ticks); } else return new TimeSpan(DateTime.Now.Ticks); } catch (Exception ex) { return new TimeSpan(DateTime.Now.Ticks); } } public object ConvertBack(object value,string language) { TimeSpan ts = (TimeSpan)value; DateTime dt = new DateTime(ts.Ticks); return dt; } }
鉴于调试器中断的代码,错误似乎是在xaml端,正如我所说,删除日期和时间选择器,这是绑定使用自定义转换器的唯一元素,似乎解决它.
我错过了什么?
UPDATE
进一步的测试引起了我的注意,删除自定义转换器实际上并没有解决问题,它只是增加了导航的数量,直到错误发生.我已经尝试完全删除绑定仍然得到错误.删除每个元素,但调用下一页的按钮似乎工作,但此时我无法确定它是否实际修复了问题或只是缓解了它.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。