簡體   English   中英

Xamarin.Forms - 使用 XAML 元素作為參數

[英]Xamarin.Forms - Use XAML element as a parameter

在我的 XAML 頁面中,我設置了一個 Picker。 它工作得很好,但它不是非常用戶友好,因為無法在 Picker 參數中添加箭頭圖標。 所以我添加了一個帶有手勢識別器的圖像,如下所示:

<Grid HeightRequest="50">
    <Picker x:Name="mySlugPicker" Grid.ColumnSpan="4"  Title="Sélectionnez votre serveur" ItemsSource="{Binding ServerList}"  ItemDisplayBinding="{Binding Value}" SelectedItem="{Binding SelectedItem}" TextColor="Black" TitleColor="Black" BackgroundColor="White"/>
    <Image Grid.Column="4" Source="down_arrow.png">
        <Image.GestureRecognizers>
            <TapGestureRecognizer NumberOfTapsRequired="1" Command="{Binding OpenPicker}" CommandParameter="{Binding mySlugPicker}"/>
        </Image.GestureRecognizers>
    </Image>
</Grid>

我要做的就是在按下向下箭頭時打開 Picker,所以我在 ViewModel 中定義了一個命令,如下所示:

public Command<Picker> OpenPicker { get; }

public ViewModel()
{
    OpenPicker = new Command<Picker>(TriggerPickerOpening);
}

private void TriggerPickerOpening(Picker picker)
{
    picker.Focus();
}

如您所見,我為 Picker 定義了“x:Name”屬性,並將此 x:Name 作為命令參數傳遞。 但是當我啟動我的應用程序時,它會拋出一個 NullReferenceException。

我究竟做錯了什么?

通過不為您的綁定指定Source ,它將mySlugPicker ,這是您的視圖 model 並且mySlugPicker不存在:

<Grid HeightRequest="50">
    <Picker x:Name="mySlugPicker" Grid.ColumnSpan="4"  Title="Sélectionnez votre serveur" ItemsSource="{Binding ServerList}"  ItemDisplayBinding="{Binding Value}" SelectedItem="{Binding SelectedItem}" TextColor="Black" TitleColor="Black" BackgroundColor="White"/>
    <Image Grid.Column="4" Source="down_arrow.png">
        <Image.GestureRecognizers>
            <TapGestureRecognizer NumberOfTapsRequired="1" Command="{Binding OpenPicker}" CommandParameter="{Binding Source={x:Reference mySlugPicker}}"/>
        </Image.GestureRecognizers>
    </Image>
</Grid>

避免異常/崩潰的一個好做法是在調用方法之前執行 null 檢查(不信任參數):

private void TriggerPickerOpening(Picker picker)
{
    picker?.Focus();
}

這相當於:

private void TriggerPickerOpening(Picker picker)
{
    if (picker != null)
        picker.Focus();
}

空條件運算符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM