DetailPage
을 다시 초기화하는 방법을 알고 있습니까? Button.Clicked
이벤트가이 페이지에 있습니까?버튼 클릭 이벤트로 세부 정보 페이지를 다시 초기화 (재설정) 하시겠습니까?
내 문제는 "Senden"을 클릭 한 후 필드를 재설정하여 ErrorSuccess 사진도 재설정된다는 것입니다. 내가 사용한 Behaviors
때문에 위의 두 버튼 (QR 코드 읽기 및 여섯 자리 숫자 얻기)의 값에는 작동하지 않습니다. Clicked-Event를 트리거로 사용하는 버튼 비헤이비어. 두 번째 그림에서 볼 수있는 결과입니다.
은 그래서 기본에 가서 당신에게 단순히
"Senden"-Button
타격이 페이지를 다시 초기화 할 수있는 방법들 물어보고 싶은. Navigation-Stacks에 대해서 알고 있습니다 ... 왜냐하면 그 때문에
Hamburger Menu
이 사라질 것이기 때문에 이것은 선택 사항이 아닙니다. 여기
페이지의 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:local="clr-namespace:TDE"
Title="Tankerfassung"
x:Class="TDE.TDE">
<ContentPage.Resources>
<ResourceDictionary>
<local:BooleanToObjectConverter x:Key="boolToStyleImage"
x:TypeArguments="Style">
<local:BooleanToObjectConverter.FalseObject>
<Style TargetType="Image">
<Setter Property="HeightRequest" Value="30" />
<Setter Property="Source" Value="error.png" />
</Style>
</local:BooleanToObjectConverter.FalseObject>
<local:BooleanToObjectConverter.TrueObject>
<Style TargetType="Image">
<Setter Property="HeightRequest" Value="30" />
<Setter Property="Source" Value="success.png" />
</Style>
</local:BooleanToObjectConverter.TrueObject>
</local:BooleanToObjectConverter>
<local:MultiTriggerConverterFahrer x:Key="dataHasBeenEnteredFahrer" />
<local:MultiTriggerConverterFahrzeugGeraet x:Key="dataHasBeenEnteredFahrzeugGeraet" />
<local:MultiTriggerConverterKraftstoffmenge x:Key="dataHasBeenEnteredKraftstoffmenge" />
<local:MultiTriggerConverterKmStd x:Key="dataHasBeenEnteredKmStd" />
<local:MultiTriggerConverterTankbombe x:Key="dataHasBeenEnteredTankbombe" />
<local:MultiTriggerConverterTankbombeButton x:Key="dataHasBeenEnteredTankbombeButton" />
<local:MultiTriggerConverterFahrzeugGeraetButton x:Key="dataHasBeenEnteredFahrzeugGeraetButton" />
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<ScrollView>
<Grid Padding="20">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="100" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!--Button Tankbombe Scannen-->
<Button x:Name="buttonTankbombeScannen"
Text="Tankbombe Scannen"
FontSize="20"
FontAttributes="Bold"
Margin="0,10,0,10"
BackgroundColor="#004d93"
TextColor="White"
Grid.Row="0"
Grid.ColumnSpan="2">
<Button.Behaviors>
<local:TankbombeValidatorBehaviorButton x:Name="tankbombeValidatorBehaviorButton"/>
</Button.Behaviors>
</Button>
<Image Grid.Column="2"
Grid.Row="0"
Margin="0,10,0,10"
x:Name="buttonTankbombeScannenSuccessErrorImage"
Style="{Binding Source={x:Reference tankbombeValidatorBehaviorButton}, Path=IsValid, Converter={StaticResource boolToStyleImage}}"/>
<!--Button Fahrzeug Scannen-->
<Button x:Name="buttonFahrzeugGeraetScannen"
Text="Fahrzeug/Gerät Scannen"
FontSize="20"
FontAttributes="Bold"
Margin="0,10,0,10"
BackgroundColor="#004d93"
TextColor="White"
Grid.Row="1"
Grid.ColumnSpan="2">
<Button.Behaviors>
<local:FahrzeugGeraetValidatorBehaviorButton x:Name="fahrzeugGeraetValidatorBehaviorButton"/>
</Button.Behaviors>
</Button>
<Image Grid.Column="2"
Grid.Row="1"
Margin="0,10,0,10"
x:Name="buttonFahrzeugGeraetScannenSuccessErrorImage"
Style="{Binding Source={x:Reference fahrzeugGeraetValidatorBehaviorButton}, Path=IsValid, Converter={StaticResource boolToStyleImage}}"/>
<!--Entry Kraftstoffmenge-->
<Entry x:Name="entryKraftstoffmenge"
Placeholder="Getankte Kraftstoffmenge"
PlaceholderColor="#004d93"
FontSize="15"
Margin="0,10,0,10"
FontAttributes="Bold"
HorizontalTextAlignment="End"
Grid.Row="2"
Grid.Column="0"
Keyboard="Numeric">
<Entry.Behaviors>
<local:KraftstoffmengeValidatorBehavior x:Name="kraftstoffmengeValidator"/>
</Entry.Behaviors>
</Entry>
<Label Grid.Column="1"
Grid.Row="2"
Text="Liter"
Margin="0,10,0,10"
HorizontalOptions="Start"
VerticalOptions="Center"
HorizontalTextAlignment="Start"/>
<Image Grid.Column="2"
Grid.Row="2"
Margin="0,10,0,10"
x:Name="kraftstoffmengeSuccessErrorImage"
Style="{Binding Source={x:Reference kraftstoffmengeValidator}, Path=IsValid, Converter={StaticResource boolToStyleImage}}"/>
<!--Entry Kilometer/Stunden-->
<Entry x:Name="entryKmStd"
Placeholder="KM-Stand oder Stunden"
PlaceholderColor="#004d93"
FontSize="15"
Margin="0,10,0,10"
FontAttributes="Bold"
HorizontalTextAlignment="End"
Grid.Row="3"
Grid.Column="0"
Keyboard="Numeric">
<Entry.Behaviors>
<local:KmStdValidatorBehavior x:Name="kmStdValidator"/>
</Entry.Behaviors>
</Entry>
<Label Grid.Column="1"
Grid.Row="3"
Margin="0,10,0,10"
Text="KM/Stunden"
HorizontalOptions="Start"
VerticalOptions="Center"
HorizontalTextAlignment="Start"/>
<Image Grid.Column="2"
Grid.Row="3"
Margin="0,10,0,10"
x:Name="kmStdSuccessErrorImage"
Style="{Binding Source={x:Reference kmStdValidator}, Path=IsValid, Converter={StaticResource boolToStyleImage}}"/>
<!--Entry Fahrername-->
<Entry x:Name="entryFahrer"
Placeholder="Ihr Name oder Kürzel"
PlaceholderColor="#004d93"
Margin="0,10,0,10"
FontSize="15"
FontAttributes="Bold"
HorizontalTextAlignment="Center"
Grid.Row="4"
Grid.ColumnSpan="2">
<Entry.Behaviors>
<local:FahrerValidatorBehavior x:Name="fahrerValidator"/>
</Entry.Behaviors>
</Entry>
<Image Grid.Column="2"
Margin="0,10,0,10"
Grid.Row="4"
x:Name="fahrerSuccessErrorImage"
Style="{Binding Source={x:Reference fahrerValidator}, Path=IsValid, Converter={StaticResource boolToStyleImage}}"/>
<!--Button Vorgang Abschliessen-->
<Button x:Name="buttonAbschliessen"
Text="Senden"
FontSize="25"
FontAttributes="Bold"
BackgroundColor="Green"
Margin="0,10,0,10"
TextColor="White"
IsEnabled="False"
Clicked="buttonAbschliessen_Clicked"
Opacity="0.3"
Grid.Row="5"
Grid.ColumnSpan="3">
<Button.Triggers>
<MultiTrigger TargetType="Button">
<MultiTrigger.Conditions>
<BindingCondition Binding="{Binding Source={x:Reference entryFahrer}, Path=Text.Length, Converter={StaticResource dataHasBeenEnteredFahrer}}" Value="true"/>
<BindingCondition Binding="{Binding Source={x:Reference entryKraftstoffmenge}, Path=Text.Length, Converter={StaticResource dataHasBeenEnteredKraftstoffmenge}}" Value="true"/>
<BindingCondition Binding="{Binding Source={x:Reference entryKmStd}, Path=Text.Length, Converter={StaticResource dataHasBeenEnteredKmStd}}" Value="true"/>
<BindingCondition Binding="{Binding Source={x:Reference buttonTankbombeScannen}, Path=Text, Converter={StaticResource dataHasBeenEnteredTankbombeButton}}" Value="true"/>
<BindingCondition Binding="{Binding Source={x:Reference buttonFahrzeugGeraetScannen}, Path=Text, Converter={StaticResource dataHasBeenEnteredFahrzeugGeraetButton}}" Value="true"/>
</MultiTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
<Setter Property="Opacity" Value="1"/>
</MultiTrigger>
</Button.Triggers>
</Button>
</Grid>
</ScrollView>
</ContentPage.Content>
</ContentPage>
페이지 뒤에 코드 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TDE.ViewModels;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace TDE
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class TDE : ContentPage
{
public TDE()
{
InitializeComponent();
BindingContext = new AddTankerfassungViewModel();
}
private void buttonAbschliessen_Clicked(object sender, EventArgs e)
{
AddTankerfassungViewModel.tankerfassung.mTDE = false;
Email.SendeEmail();
ResetPage();
}
public void ResetPage()
{
entryFahrer.Text = null;
buttonTankbombeScannen.Text = "Tankbombe Scannen";
entryKmStd.Text = null;
entryKraftstoffmenge.Text = null;
buttonFahrzeugGeraetScannen.Text = "Fahrzeug/Gerät Scannen";
AddTankerfassungViewModel.tankerfassung.Tankbombe = null;
AddTankerfassungViewModel.tankerfassung.IsValidFahrer = false;
AddTankerfassungViewModel.tankerfassung.IsValidFahrzeugGeraet = false;
AddTankerfassungViewModel.tankerfassung.IsValidKmStd = false;
AddTankerfassungViewModel.tankerfassung.IsValidKraftstoffmenge = false;
AddTankerfassungViewModel.tankerfassung.IsValidTankbombe = false;
}
}
}
과 행동 중 하나를 heres 코드 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TDE.ViewModels;
using Xamarin.Forms;
using ZXing.Mobile;
namespace TDE
{
public class TankbombeValidatorBehaviorButton : Behavior<Button>
{
static readonly BindablePropertyKey IsValidPropertyKey = BindableProperty.CreateReadOnly("IsValid", typeof(bool), typeof(bool), false);
public static readonly BindableProperty IsValidProperty = IsValidPropertyKey.BindableProperty;
public bool IsValid
{
get { return (bool)base.GetValue(IsValidProperty); }
private set
{
base.SetValue(IsValidPropertyKey, value);
if (value)
{
AddTankerfassungViewModel.tankerfassung.IsValidTankbombe = true;
}
else
{
AddTankerfassungViewModel.tankerfassung.IsValidTankbombe = false;
};
}
}
protected override void OnAttachedTo(Button bindable)
{
bindable.Clicked += HandleTextChanged;
}
async void HandleTextChanged(object sender, EventArgs e)
{
if (AddTankerfassungViewModel.tankerfassung.Tankbombe != null)
{
var scanner = new MobileBarcodeScanner();
var result = await scanner.Scan();
if (result != null)
{
if (result.Text.ToString() == "691316" || result.Text.ToString() == "691141")
{
AddTankerfassungViewModel.tankerfassung.Tankbombe = result.Text.ToString();
AddTankerfassungViewModel.tankerfassung.IsValidTankbombe = true;
}
else
{
AddTankerfassungViewModel.tankerfassung.Tankbombe = result.Text.ToString();
AddTankerfassungViewModel.tankerfassung.IsValidTankbombe = false;
}
}
}
IsValid = Validierung.ValidiereTankbombe(AddTankerfassungViewModel.tankerfassung.Tankbombe);
((Button)sender).Text = IsValid ? "Tankbombe: " + AddTankerfassungViewModel.tankerfassung.Tankbombe : "Ungültig. Neu Scannen!";
}
protected override void OnDetachingFrom(Button bindable)
{
bindable.Clicked -= HandleTextChanged;
}
}
}
문제는 버튼 클릭 이벤트가 한 번만 발생하므로 동작이 한 번만 발생한다는 것입니다. 다른 방법이 필요합니다.
내가 XAML에서 명령을 결합하려고 노력하지만 내 multitrigger 난 당신이 MVVM에 대해 뭔가를 잘못있어 생각 ... 더 이상
스크린 샷이 아닌 코드 메이트를 보여줍니다. – SeM
전체 페이지를 다시 초기화하여 손쉬운 해결 방법을 얻으려고한다고 생각하지만 앱 성능에 좋지 않습니다. SeM이 제안한대로 코드를 보여 주시면 도와 드리겠습니다! :) –