Ich habe eine PCL und ich verwende MVVM Muster. Ich baue ein togglebutton, das schaltet, wenn die zugehörige Eigenschaft im Viewmodel aktiviert ist, mit Verhalten und Triggern. Das ist mein VerhaltenXamarin Forms ToggleButton
public class ToggleBehavior : Behavior<View>
{
TapGestureRecognizer tapRecognizer;
public static readonly BindableProperty IsToggledProperty = BindableProperty.Create<ToggleBehavior, bool>(tb => tb.IsToggled, false);
public bool IsToggled
{
set { SetValue(IsToggledProperty, value); }
get { return (bool)GetValue(IsToggledProperty); }
}
}
Dies ist, wie ich mein Verhalten verbrauchen
<Button Text="AUTO" Style="{StaticResource SmallEllipseButton}" BackgroundColor="{StaticResource BackgroundColor}" cm:Message.Attach="Automatic($dataContext)">
<Button.Behaviors>
<local:ToggleBehavior x:Name="autoToggleBehavior" IsToggled="{Binding CurrentMode,Converter={StaticResource modeToBooleanConverter}, ConverterParameter=AUTO}"/>
</Button.Behaviors>
<Button.Triggers>
<DataTrigger TargetType="Button" Binding="{Binding Source={x:Reference autoToggleBehavior},Path=IsToggled}" Value="False" >
<Setter Property="BackgroundColor" Value="White"/>
<Setter Property="BorderColor" Value="White"/>
<Setter Property="TextColor" Value="Gray"/>
</DataTrigger>
<DataTrigger TargetType="Button" Binding="{Binding Source={x:Reference autoToggleBehavior},Path=IsToggled}" Value="True" >
<Setter Property="BackgroundColor" Value="{StaticResource BackgroundColor}"/>
<Setter Property="TextColor" Value="White"/>
</DataTrigger>
</Button.Triggers>
</Button>
Das Problem ist, dass die Eigenschaft isToggled nicht korrekt in diesem IsToggled="{Binding CurrentMode,Converter={StaticResource modeToBooleanConverter}, ConverterParameter=AUTO}"/>
binded ist, wenn ich es statisch wahr oder falsch gesetzt Es klappt. Das Problem, das ich denke, ist, dass ich diese Eigenschaft nicht dynamisch binden kann. Ich benutze die gleiche Bindung mit dem gleichen Konverter auf der gleichen Seite für eine IsVisible-Eigenschaft und es funktioniert. Wenn ich einen Haltepunkt in den Konverter setzen, bricht die Anwendung nicht in es, aber für die IsVisible-Eigenschaft bricht.
auch mit dem Label "isToggled" Bindung funktioniert nicht. Es funktioniert nur, wenn ich es auf wahr/falsch setze, aber es scheint, dass ich es nicht an eine Viewmodel-Eigenschaft binden kann – Marco24690
Der obige Code hat für Bindungen für mich funktioniert. Der Trick bestand darin, den Bindungskontext für das OnAttachedTo (BindableObject) vom bindbaren Objekt festzulegen. Das scheint mir ein Hack zu sein, aber ich vermute, dass entweder das Verhalten nicht bindbar ist oder ein Fehler im XF-Code vorliegt. Vielleicht möchten Sie in Bugzilla einen Fehlerbericht erstellen. – SKall
Ich habe die OnAttachedTo-Methode nicht hinzugefügt. Jetzt klappt es, auch mit Button. Vielen Dank – Marco24690