Die ganze "Geschichte" nur um alles in XAML konfigurieren zu können. Ich versuche, Parameter (Variable aus meiner Application-Klasse) an ObjectDataProvider (ODP) -Methode übergeben. Die Idee war, Markup-Erweiterung zu verwenden. Jetzt läuft zur Laufzeit alles einwandfrei und die Erweiterung gibt diesen Parameter für ODP zurück. Zur Entwurfszeit hat es nicht funktioniert. Sind Markup-Erweiterungen zur Entwurfszeit nicht verwendbar? Gibt es eine Möglichkeit zu überprüfen, ob sie fällige Entwurfszeit genannt werden?Seltsames Verhalten der Markup-Erweiterung. Funktioniert es nicht im Entwurfsmodus?
Erweiterung:
namespace ZApplication
{
public class ZAppExtension : MarkupExtension
{
public ZAppExtension() { }
public override object ProvideValue(IServiceProvider serviceProvider)
{
MessageBox.Show("ProvideValue called");
return @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=TermineDB;Integrated Security=True;Persist Security Info=True";
}
}
}
XAML Object:
<ObjectDataProvider x:Key="objKalender"
MethodName="GetKalender"
ObjectType="{x:Type zzzDataLayer:TermineAPI}">
<ObjectDataProvider.MethodParameters>
<z:ZAppExtension></z:ZAppExtension>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
Bindung, die nicht funktioniert hat zur Entwurfszeit:
<ListBox x:Name="listBox" Height="129" Margin="19,0,18,37" VerticalAlignment="Bottom"
ItemsSource="{Binding Mode=OneWay, Source={StaticResource objKalender}}"
DisplayMemberPath="Beschreibung" SelectedValuePath="Id"
SelectedIndex="2" SelectedValue="{Binding PrimaryCalendarId}" BorderThickness="1"/>
proove dass Erweiterung funktioniert:
<TextBlock x:Name="textBlock1" HorizontalAlignment="Right" Margin="0,210,42,190" TextWrapping="Wrap" Text="{z:ZApp}" Width="247"/>
Wenn Markups nicht zulässig sind/irgendwie zur Entwurfszeit deaktiviert, was ein Weg sein, wird jede Variable zu übergeben MethodParameter?
Jede Hilfe wird geschätzt.
bearbeiten für das Hinzufügen von GetKalender:
public static IEnumerable<Kalender> GetKalender(String strConnectionString=null)
{
zEntityContext.zDataContext dc;
if (String.IsNullOrEmpty(strConnectionString))
dc = new zEntityContext.zDataContext();
else
dc = new zEntityContext.zDataContext(strConnectionString);
return dc.Kalendere.Select(kalender => new Kalender(kalender, dc));
}
bearbeitet für DinamicResource zu Static in Bindung von List-Box zu ändern.
Danke. Jetzt weiß ich, wie man den DESGN-Status in einem Nicht-UI-Element findet. Bis zum Hauptproblem - immer noch kann ich nicht verstehen, warum diese Bindung zur Designzeit nicht funktioniert hat. PS: Bearbeiteter Themenstarter - GetKalender hinzugefügt. – AndrewZ
Gibt es andere konventionelle Methoden (ohne Erweiterung), die es mir erlauben, statische Eigenschaft von einem Objekt als Parameter an ObjectDataProvider zu übergeben? Ich mag es, wie es mit Erweiterungs- und Erweiterungsmöglichkeit zu Tisch gemacht werden könnte - aber nur wenn das zuverlässig funktioniert :) – AndrewZ
Anjum, danke für den Vorschlag. Aber Ausnahme will mein Problem - Problem war Erweiterung wurde nicht zur Entwurfszeit aufgerufen. Überwindung durch Überprüfung überall, wenn etwas im Design-Modus eine schlechte Lösung ist (für mich zumindest). In diesem Moment muss ich sauberes XAML produzieren und einige Daten in der Entwurfszeit sehen. Diese Erweiterung (und der Parameter für ODP) sollte verschiedene Datenbankverbindungen basierend auf meiner Konfiguration zeigen. Dies hat nichts mit App.config und Consorts zu tun.Wie auch immer, es ist seltsam, dass diese Erweiterung nicht zur Designzeit aufgerufen hat, sondern zur Laufzeit. – AndrewZ