我有一個訂單狀態屬性是一個枚舉,我想改變基於枚舉值顯示XAML。XAML基於枚舉 - Xamarin形式
這可能嗎?
這是我的XAML用我所有的佈局我已經工作(一些被註釋掉):
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
x:Class="Divco.OrderPage"
Title="Order">
<ContentPage.BindingContext>
</ContentPage.BindingContext>
<ContentPage.Content>
<!-- Basic stack layout used in all order views -->
<StackLayout>
<!--<StackLayout.Style>-->
<!-- Needs Driver -->
<!--<StackLayout>
<maps:Map WidthRequest="320" HeightRequest="150"
x:Name="WaitingMap"
IsShowingUser="false"
MapType="Street" />
</StackLayout>
<StackLayout Padding="20, 0, 20, 0">
<Label Text="{Binding CurrentOrder.Description}" LineBreakMode="WordWrap" Font="12" HorizontalTextAlignment="Center" />
<Label Text="Pickup" TextColor="Fuchsia" Font="Bold,14" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.PickupContact.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.PickupAddress.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.PickupTimeFormatted}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="Dropoff" TextColor="Fuchsia" Font="Bold,14" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.DropoffContact.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.DropoffAddress.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.DropoffTimeFormatted}" Font="12" HorizontalTextAlignment="Center" />
</StackLayout>
<StackLayout VerticalOptions="EndAndExpand" Padding="20, 0, 20, 20">
<Button Text="Navigate!"
BackgroundColor="Fuschia"
TextColor="White"
Font="Bold,20"
Grid.Row="0" Grid.Column="1" />
</StackLayout>-->
<!-- Waiting Driver -->
<!--<StackLayout>
<maps:Map WidthRequest="320" HeightRequest="200"
x:Name="WaitingMap"
IsShowingUser="true"
MapType="Street" />
</StackLayout>
<StackLayout VerticalOptions="CenterAndExpand" Padding="20, 0, 20, 0" >
<Label Text="Pickup" TextColor="Fuchsia" Font="Bold" />
<Label Text="{Binding CurrentOrder.PickupContact.Display}"/>
<Label Text="{Binding CurrentOrder.PickupAddress.Display}"/>
<Label Text="{Binding CurrentOrder.PickupTimeFormatted}"/>
</StackLayout>
<StackLayout VerticalOptions="EndAndExpand" Padding="20, 0, 20, 20">
<Grid>
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Text="Navigate"
BackgroundColor="Gray"
TextColor="White"
Font="Bold"
Grid.Row="0" Grid.Column="0"/>
<Button Text="Call"
BackgroundColor="Gray"
TextColor="White"
Font="Bold"
Grid.Row="0" Grid.Column="1"/>
</Grid>
<Button Text="I'm here!"
BackgroundColor="Fuschia"
TextColor="White"
Font="Bold,20" />
</StackLayout>-->
<!-- Intransit -->
<!--<StackLayout>
<maps:Map WidthRequest="320" HeightRequest="200"
x:Name="TransitMap"
IsShowingUser="true"
MapType="Street" />
</StackLayout>
<StackLayout VerticalOptions="CenterAndExpand" Padding="20, 0, 20, 0" >
<Label Text="Dropoff" TextColor="Fuchsia" Font="Bold" />
<Label Text="{Binding CurrentOrder.DropoffContact.Display}"/>
<Label Text="{Binding CurrentOrder.DropoffAddress.Display}"/>
<Label Text="{Binding CurrentOrder.DropoffTimeFormatted}"/>
</StackLayout>
<StackLayout VerticalOptions="EndAndExpand" Padding="20, 0, 20, 20">
<Grid>
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Text="Navigate"
BackgroundColor="Gray"
TextColor="White"
Font="Bold"
Grid.Row="0" Grid.Column="0"/>
<Button Text="Call"
BackgroundColor="Gray"
TextColor="White"
Font="Bold"
Grid.Row="0" Grid.Column="1"/>
</Grid>
<Button Text="I'm here!"
BackgroundColor="Fuschia"
TextColor="White"
Font="Bold,20" />
</StackLayout>-->
<!-- Needs Signature -->
<!--<StackLayout VerticalOptions="CenterAndExpand" Padding="20, 20, 20, 20">
<Label Text="In order to verify the identity of the signature, please take a photo of the recipient's ID." HorizontalTextAlignment="Center"/>
<Button Text="Take Picture"
BackgroundColor="Gray"
TextColor="White"
Font="Bold,20"/>
<Button Text="Sign"
BackgroundColor="Fuschia"
TextColor="White"
Font="Bold,20" IsEnabled="false"/>
</StackLayout>-->
<!-- Complete! -->
<StackLayout>
<maps:Map WidthRequest="320" HeightRequest="150"
x:Name="WaitingMap"
IsShowingUser="false"
MapType="Street" />
</StackLayout>
<StackLayout Padding="20, 0, 20, 0">
<Label Text="{Binding CurrentOrder.Description}" LineBreakMode="WordWrap" Font="12" HorizontalTextAlignment="Center" />
<Label Text="Pickup" TextColor="Fuchsia" Font="Bold,14" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.PickupContact.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.PickupAddress.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.PickupTimeFormatted}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="Dropoff" TextColor="Fuchsia" Font="Bold,14" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.DropoffContact.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.DropoffAddress.Display}" Font="12" HorizontalTextAlignment="Center" />
<Label Text="{Binding CurrentOrder.DropoffTimeFormatted}" Font="12" HorizontalTextAlignment="Center" />
</StackLayout>
<StackLayout VerticalOptions="EndAndExpand" Padding="20, 0, 20, 20">
<Label Text="This order is complete! Great work!" HorizontalTextAlignment="Center" TextColor="Fuchsia" Font="Bold"/>
</StackLayout>
<!--</StackLayout.Style>-->
</StackLayout>
</ContentPage.Content>
因此,舉例來說,我想以下時顯示訂單狀態是 「在途」:
:<!-- Intransit -->
<!--<StackLayout>
<maps:Map WidthRequest="320" HeightRequest="200"
x:Name="TransitMap"
IsShowingUser="true"
MapType="Street" />
</StackLayout>
<StackLayout VerticalOptions="CenterAndExpand" Padding="20, 0, 20, 0" >
<Label Text="Dropoff" TextColor="Fuchsia" Font="Bold" />
<Label Text="{Binding CurrentOrder.DropoffContact.Display}"/>
<Label Text="{Binding CurrentOrder.DropoffAddress.Display}"/>
<Label Text="{Binding CurrentOrder.DropoffTimeFormatted}"/>
</StackLayout>
<StackLayout VerticalOptions="EndAndExpand" Padding="20, 0, 20, 20">
<Grid>
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Text="Navigate"
BackgroundColor="Gray"
TextColor="White"
Font="Bold"
Grid.Row="0" Grid.Column="0"/>
<Button Text="Call"
BackgroundColor="Gray"
TextColor="White"
Font="Bold"
Grid.Row="0" Grid.Column="1"/>
</Grid>
<Button Text="I'm here!"
BackgroundColor="Fuschia"
TextColor="White"
Font="Bold,20" />
</StackLayout>-->
VS時的順序是 「完全」 以下
下面是Order類供參考:
public class Order : INotifyPropertyChanged
{
// event to handle changes in the order status
public event PropertyChangedEventHandler PropertyChanged;
public enum Status { Preview, NeedsDriver, WaitingDriver, InTransit, NeedsSignature, Complete, Refunded }
public string ID { get; set; }
public string Description { get; set; }
private Status _orderStatus;
public Status OrderStatus {
get
{
return _orderStatus;
}
set
{
_orderStatus = value;
// tell the view that the order status has changed
OnPropertyChanged("OrderStatus");
}
}
public Contact PickupContact { get; set; }
public Contact DropoffContact { get; set; }
public Address PickupAddress { get; set; }
public Address DropoffAddress { get; set; }
public DateTime PickupTime { get; set; }
public DateTime DropoffTime { get; set; }
// Formatted Pickup and Dropoff Times
public string PickupTimeFormatted
{
get { return PickupTime.ToString("g"); }
}
public string DropoffTimeFormatted
{
get { return DropoffTime.ToString("g"); }
}
public Order()
{
}
// Handler to tell the view that the order status has changed
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public override string ToString()
{
return string.Format("[Order: ID={0}, Description={1}, OrderStatus={2}, PickupContact={3}, DropoffContact={4}, PickupAddress={5}, DropoffAddress={6}, PickupTime={7}, DropoffTime={8}, PickupTimeFormatted={9}, DropoffTimeFormatted={10}]", ID, Description, OrderStatus, PickupContact, DropoffContact, PickupAddress, DropoffAddress, PickupTime, DropoffTime, PickupTimeFormatted, DropoffTimeFormatted);
}
}
感謝您的回覆,我更新了我的問題,希望澄清我所問的內容。我希望這有幫助。 –