小编eri*_*rin的帖子

Xamarin表单的棱镜 - 从标签页导航

(使用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)

prism xamarin.forms

4
推荐指数
1
解决办法
1543
查看次数

单元测试项目从 Observable 中过滤掉(Jasmine/RxJS)

我正在使用 Jasmine/Karma 针对 Angular 服务进行单元测试。我想确认我的服务是否正确过滤了项目。

例如,如果我有一项服务可以吸引特定年龄以上的人,那么它

  1. 应该返回超过最低年龄的人(阳性案例)
  2. 不应返回最低年龄以下的人(负面情况)

这是我正在努力测试的#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)

unit-testing observable jasmine rxjs angular

4
推荐指数
1
解决办法
3475
查看次数

离子路径路由(如Angular 2中的RouterModule)

(前言:我来自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的导航结构是否支持此功能?

ionic-framework ionic2 angular2-routing

3
推荐指数
1
解决办法
2054
查看次数

Xamarin Forms HybridWebview始终在浏览器中打开

我已经实现了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属性来确定其显示方式吗?

android android-webview xamarin xamarin.forms

3
推荐指数
1
解决办法
532
查看次数

服务返回的Observable的单元测试值(使用异步管道)

运行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)

unit-testing jasmine typescript karma-runner angular

3
推荐指数
1
解决办法
6224
查看次数

在数据模板中绑定命令 (XF/Prism)

将 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 为空的异常。

还有其他解决办法吗?

c# prism xamarin xamarin.forms

2
推荐指数
1
解决办法
1277
查看次数