(使用Prism 6.1.0-pre6和XF 2.3.0.107)
简介:从TabbedPage导航到ContentPage不会显示工具栏/操作栏.
我从另一个页面导航到TabbedPage(MainPage.xaml).这看起来像这样:
<TabbedPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Or.Console.Views"
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
x:Class="Or.Console.Views.MainPage">
<local:APage/>
<local:BPage/>
<local:CPage/>
</TabbedPage>
Run Code Online (Sandbox Code Playgroud)
在APage的ViewModel中,我正在打电话
_navigationService.NavigateAsync("DetailsPage");
Run Code Online (Sandbox Code Playgroud)
DetailsPage只是一个ContentPage,我希望它会显示顶部的后退按钮和操作栏,但事实并非如此.
我猜这是因为Prism不知道tab子页面,只知道TabbedPage本身.
我已经尝试使用Prism注册选项卡子页面,但这似乎不起作用.还尝试在NavigationPage中包装每个tab子项,但这会带来一些带有重复工具栏的奇怪行为.
从标签内容导航的正确方法是什么?
编辑:回应Brian Lagunas的回答,我尝试将TabbedPage包装在NavigationPage中,所以当我导航到它时,我正在调用
_navigationService.NavigateAsync("DeviceNavWrapper/MainPage");
Run Code Online (Sandbox Code Playgroud)
EDIT2:我的案例中的解决方案最终我需要从appage调用NavigateAsync并将useModalNavigation设置为false.所以现在APage有这个:
_navigationService.NavigateAsync("DetailsPage", null, false);
Run Code Online (Sandbox Code Playgroud) 我正在使用 Jasmine/Karma 针对 Angular 服务进行单元测试。我想确认我的服务是否正确过滤了项目。
例如,如果我有一项服务可以吸引特定年龄以上的人,那么它
这是我正在努力测试的#2。
服务:
getPeople(minAge: number): Observable<string> {
const source = Observable.from([
{ name: 'Joe', age: 30 },
{ name: 'Frank', age: 20 },
{ name: 'Ryan', age: 50 }
]);
return source
.filter(person => person.age >= minAge)
.map(person => person.name);
}Run Code Online (Sandbox Code Playgroud)
积极的单元测试
it('should return people over 30', () => {
const service = new MyService();
const minAge = 30;
service.getPeople(minAge).subscribe(people => {
expect(people.length).toBeGreaterThan(0);
});
});Run Code Online (Sandbox Code Playgroud)
和负面的单元测试
it('should not return people over 55', () …Run Code Online (Sandbox Code Playgroud)(前言:我来自C#/ WPF背景,一般来说是网络开发的新手 - 请耐心等待!)
使用Angular 2,我能够像这样定义我的路线:
RouterModule.forChild([
{ path: 'contacts', component: ContactsComponent }
])
Run Code Online (Sandbox Code Playgroud)
然后,在一些html中,我可以使用routerLink语法来引用它:
routerLink='/contacts'
Run Code Online (Sandbox Code Playgroud)
这很好用,最终它允许我用绑定替换字符串,所以我可以在运行时获取路径,允许数据确定导航结构.
现在,我试图在Ionic 2中做类似的事情,但如果有可能,那对我来说并不明显.我已经看到你如何使用[navPush]使用深层链接绑定到页面(就像这个人做的那样:http://plnkr.co/edit/syUH0d6SJd2gAjqaPLwr?p = preview ),但是这需要提前定义页面在想要使用它的组件中的时间.
Ionic的导航结构是否支持此功能?
我已经实现了HybridWebView,如下所述:https : //developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/hybridwebview/
现在,我已经在渲染器中对网址进行了硬编码,如下所示:
Control.LoadUrl("http://www.google.com");
Run Code Online (Sandbox Code Playgroud)
结果是打开了url,但始终在新的浏览器中,而不像我期望的那样嵌入到我的ContentPage中。
我可以使用Android.Webkit.WebView上的Settings属性来确定其显示方式吗?
运行Angular / Jasmine / Karma,我有一个组件消耗服务来设置Observable'items'数组的值。我使用异步管道显示此内容。效果很好。
现在,我正在尝试建立一个单元测试并使其通过,但是我不确定我是否正确地验证了“ items”数组是否获得了正确的值。
这是相关的组件.html和.ts:
export class ViperDashboardComponent implements OnInit, OnDestroy {
items: Observable<DashboardItem[]>;
constructor(private dashboardService: ViperDashboardService) { }
ngOnInit() {
this.items = this.dashboardService.getDashboardItems();
}
}Run Code Online (Sandbox Code Playgroud)
<ul class="list-group">
<li class="list-group-item" *ngFor="let item of items | async">
<h3>{{item.value}}</h3>
<p>{{item.detail}}</p>
</li>
</ul>Run Code Online (Sandbox Code Playgroud)
而我的component.spec.ts:
beforeEach(() => {
fixture = TestBed.createComponent(ViperDashboardComponent);
component = fixture.componentInstance;
viperDashboardService =
fixture.debugElement.injector.get(ViperDashboardService);
mockItems = [
{ key: 'item1', value: 'item 1', detail: 'This is item 1' },
{ key: 'item2', value: 'item 2', detail: 'This is …Run Code Online (Sandbox Code Playgroud)将 Prism 用于 Xamarin Forms,我有一个像这样的 ListView:
<ListView ItemsSource="{Binding Conditions}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid Margin="4" RowSpacing="0">
<Button Command="{Binding DoSomething}"/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)
其中 Condition 是 ConditionViewModel 的 ObservableCollection,DoSomething 命令位于页面的 ViewModel 中。
所以,当然,绑定在这里不起作用,因为它的 bindingcontext 将是一个单独的 ConditionViewModel 项目。
我知道相对绑定在 Xamarin 中不可用,并且规定的解决方案似乎是直接应用 {x:Reference SomeViewModel}。但是使用 Prism,View 不能直接访问它的 ViewModel,所以这是不可能的。
我也看过这个,试图获得一个 RelativeContext 标记扩展:https : //github.com/corradocavalli/Xamarin.Forms.Behaviors/blob/master/Xamarin.Behaviors/Extensions/RelativeContextExtension.cs 但是,得到RootObject 为空的异常。
还有其他解决办法吗?
angular ×2
jasmine ×2
prism ×2
unit-testing ×2
xamarin ×2
android ×1
c# ×1
ionic2 ×1
karma-runner ×1
observable ×1
rxjs ×1
typescript ×1