In meiner XAML bekomme ich alle Kunden von auf eine GetAll Eigenschaft Bindung:Kann ich geworfene Ausnahmen in XAML behandeln?
<ListBox ItemsSource="{Binding GetAll}"
ItemTemplate="{StaticResource allCustomersDataTemplate}"
Style="{StaticResource allCustomersListBox}">
</ListBox>
Die GetAll Eigenschaft ist eine beobachtbare Sammlung meiner Ansicht nach Modell, das das Modell ruft die ganze Sammlung von Kunden zu erhalten:
public class CustomersViewModel
{
public ObservableCollection<Customer> GetAll {
get
{
try
{
return Customer.GetAll;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}
Wenn im Modell etwas schief läuft (schlecht formatierte XML-Datei usw.), blubbert eine Ausnahme bis zu dieser GetAll-Eigenschaft im ViewModel.
Erste Frage: Ich war überrascht, dass XAML nichts mit Ausnahme zu tun scheint und nur geht voran und zeigt nichts an. Ist das Absicht? Ist das ein Teil des "Entkopplungsansatzes"?
Zweite Frage: Dies führt mich zu denken ich die Ausnahme in XAML umgehen konnte irgendwie, wie
Pseudo-Code:
<Trigger>
<Trigger.OnException>
<TextBox Text="The customer data could not be loaded."/>
</Trigger.OnException>
</Trigger>
ungefähr so wie oben ist Code möglich?
Ich brauchte diese für die Validierung, so helfen, danke, aber ich denke, die Validierung von Fehlerbehandlung getrennt ist, seltsam, dass die Fehlerbehandlung in XAML nicht möglich erscheint selbst, würden Sie denken, dass a Übliches Szenario: (1) Gegenstände abrufen und anzeigen, (2) wenn etwas schief geht, Daten abrufen, Nachricht Nr. 1 wie folgt anzeigen, (3) wenn noch etwas schief geht, Nachricht Nr. 2 so anzeigen, scheint dies so zu sein die Verantwortung des XAML-UI, dh etwas, auf das der Designer klicken können sollte. –
Versuchen Sie, die erste Route, die ich dann erwähnt habe, hinunterzugehen. Wenn Sie mit einem MVVM-Muster arbeiten, sollte dies einfach zu implementieren sein. Sie möchten etwas wie eine 'BindingFailed' -Eigenschaft in der Klasse, an die Sie binden, die Sie dann in einem Eigenschaftstrigger in Ihrem XAML verwenden, um die' ControlTemplate' Ihres 'UIElement' zu ändern. Oder wenn Sie mehr als zwei Fehlerzustände benötigen, implementieren Sie den Fehler als enum oder Sie könnten sogar die BindingFailure-Eigenschaft als "BindingException" vom Typ "Exception" implementieren, wenn Sie die ExceptionMessage anzeigen möchten. – Stimul8d