Benutzer mit den meisten Antworten
WPF: Datenbindung mit Validierung

Frage
-
Hallo,
ich habe ein Problem, ich kämpfe mich gerade durch das Thema Datenbindung mit Validierung. Erstmal vorab mein Code.
Klasse für Einstellungen:
Public Class Settings Inherits ValidationRule Public Property Min As Integer Public Property MinValue As Integer Public Overrides Function Validate(ByVal value As Object, ByVal cultureInfo As System.Globalization.CultureInfo) As System.Windows.Controls.ValidationResult Return Nothing End Function End Class
Fenster:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid> <TextBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120"> <TextBox.Text> <Binding Path="Min" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <local:Settings MinValue="0"/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </Grid> </Window>
Jetzt bekomme ich die Fehlermeldung:
Fehler 1 Der local:Settings-Typ wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und alle Assemblys, auf die verwiesen wird, müssen erstellt worden sein. G:\Development\VB.NET 2010\testprojects\WPF\WpfApplication2\MainWindow.xaml 10 26 WpfApplication2
Die Klasse und das Fenster befinden sich in einem un dem selben Projekt(und auch Namespace). Ich verstehe das nicht, irgendetwas muss da fehlen, ich weiß bloß nicht was.
Danke für jede Hilfe.
--
Gruß Scotty
Antworten
-
Hallo Scotty,
Schau Dir mal diese Diskussionsfäden an. Vielleicht Vielleicht können sie Dir weiterhelfen.
How to: Using Binding in an Custom Validation Rule
Add custom ValidationRule on a Control via code (not XAML)
Habe noch reine Theoretische Artikel gefunden.
Fehlt hier die Klasse „Settings“ von <local:Settings MinValue="0"/> ?
Grüße,
Robert
- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 15:39
-
Hi Karsten,dein Fenster (Window) wei�? nicht, was dein Aliasname "local" bedeutet. Für den Aliasnamen musst du noch einen Verweis einbinden, d.h. einen Verweis auf den Namensraum, wo sich deine Klasse Settings befindet. wenn sich die Settings-Klasse im Namensraum WpfApplication1 befindet, sieht die Lösung so aus:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</ SPAN> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" xmlns:local="clr-namespace:WpfApplication1"> <Grid> <TextBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120"> <TextBox.Text> <Binding Path="Min" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <local:Settings MinValue="0"/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </Grid> </Window>
--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Peter Fleischer Mittwoch, 16. Juni 2010 09:03
- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 15:39
-
Hallo Karsten,
zum Thema "Visual Studio Projekt auf Netzlaufwerken" gab es ja schon einige Diskussionen. Die Kernaussage war: Sollte man vermeiden. Am elegantesten umgeht man das hin- und herkopieren mit einer Sourcecodeverwaltung, sei es TFS Basic oder Subversion. Damit hat man auch noch paar andere Vorteile.
Work With .NET Projects From a Network Share
http://weblogs.asp.net/rmclaws/archive/2007/03/22/work-with-net-projects-from-a-network-share.aspxVielleicht kannst Du damit ja Dein Problem lösen. Wobei die Security Beschränkung ab .NET 3.5 SP1 aufgehoben sein soll.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 30. Juni 2010 16:16
- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 15:39
Alle Antworten
-
Hallo Scotty,
Schau Dir mal diese Diskussionsfäden an. Vielleicht Vielleicht können sie Dir weiterhelfen.
How to: Using Binding in an Custom Validation Rule
Add custom ValidationRule on a Control via code (not XAML)
Habe noch reine Theoretische Artikel gefunden.
Fehlt hier die Klasse „Settings“ von <local:Settings MinValue="0"/> ?
Grüße,
Robert
- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 15:39
-
Hi Karsten,dein Fenster (Window) wei�? nicht, was dein Aliasname "local" bedeutet. Für den Aliasnamen musst du noch einen Verweis einbinden, d.h. einen Verweis auf den Namensraum, wo sich deine Klasse Settings befindet. wenn sich die Settings-Klasse im Namensraum WpfApplication1 befindet, sieht die Lösung so aus:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"</ SPAN> xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525" xmlns:local="clr-namespace:WpfApplication1"> <Grid> <TextBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120"> <TextBox.Text> <Binding Path="Min" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <local:Settings MinValue="0"/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </Grid> </Window>
--
Viele Gruesse
Peter- Als Antwort vorgeschlagen Peter Fleischer Mittwoch, 16. Juni 2010 09:03
- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 15:39
-
xmlns:local="clr-namespace:WpfApplication1">
Hallo Peter,
das hatte ich auch schon ausprobiert, dabei passiert aber beim Versuch den Designer anzuzeigen das:
Fehler 1 Die Metadaten für die Assembly "WpfApplication2" konnten nicht geladen werden. Möglicherweise wurde diese Assembly aus dem Web heruntergeladen. Siehe http://go.microsoft.com/fwlink/?LinkId=179545. Fehler: Die Datei oder Assembly "WpfApplication2" oder eine Abhängigkeit davon wurde nicht gefunden. Der Vorgang wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515) G:\Development\VB.NET 2010\testprojects\WPF\WpfApplication2\MainWindow.xaml 1 1 WpfApplication2
Fehler 2 Der local:Settings-Typ wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und alle Assemblys, auf die verwiesen wird, müssen erstellt worden sein. G:\Development\VB.NET 2010\testprojects\WPF\WpfApplication2\MainWindow.xaml 11 26 WpfApplication2
Merkwürdigerweise lässt sich die Anwendung aber kompilieren und ausführen.
--
Gruß Scotty
-
"Karsten Sosna" schrieb im Newsbeitrag news:85005a4d-f10c-4fff-96be-6a6697d766d9.......
Fehler 1 Die Metadaten für die Assembly "WpfApplication2" konnten nicht geladen werden. Möglicherweise wurde diese Assembly aus dem Web heruntergeladen. Siehe http://go.microsoft.com/fwlink/?LinkId=179545. Fehler: Die Datei oder Assembly "WpfApplication2" oder eine Abhängigkeit davon wurde nicht gefunden. Der Vorgang wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515) G:\Development\VB.NET 2010\testprojects\WPF\WpfApplication2\MainWindow.xaml 1 1 WpfApplication2
Fehler 2 Der local:Settings-Typ wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und alle Assemblys, auf die verwiesen wird, müssen erstellt worden sein. G:\Development\VB.NET 2010\testprojects\WPF\WpfApplication2\MainWindow.xaml 11 26 WpfApplication2
Hi Karsten,der Fehler wird angezeigt, wenn die Assembly dem Designer nicht zur Verfügung steht. Das kann beispielsweise der Fall sein, wenn sich sowohl UI als auch Logik in der gleichen Assembly befinden und diese in der IDE geändert wurde. Da der Designer nicht entscheiden kann, ob er die alte ungeänderte Assembly nutzen soll oder erst einmal einen Übersetzungslauf starten soll, überlässt er die Entscheidung dem Anwender, indem er ihn anzeigt, dass er keine aktuelle Assembly findet.Merkwürdigerweise lässt sich die Anwendung aber kompilieren und ausführen.
Logisch, da mit dem Übersetzungslauf bei Fehlerfreiheit eine Assembly zur Verfügung gestellt wird.
Das Problem kannst du umgehen, indem du UI und Logik trennst (separate Projekte) und nach Änderungen in der Logik erst einmal eine fehlerfreie Assembly erstellst. Beachten solltest du dabei, dass sich die vom Designer genutzte Assembly in der IDE befindet und ggf. erforderliche Nutzereinstellungen (z.B. ConnectString in den Settings) auch zur IDE gehören. Diesen Fall solltest du durch geeignete Maßnahmen abfangen, damit die Assembly bei Nutzung im Designer keine Fehler bringt. Das kann man beispielsweise mit machen mit:
Private Sub InitEndPoint() ws = New xxx.xxxSoapClient If Not System.Diagnostics.Debugger.IsAttached Then ws.Endpoint.Address = New EndpointAddress("http://xxx.xxx.de/xxx.asmx") End If End Sub
--
Viele Gruesse
Peter -
xmlns:local="clr-namespace:WpfApplication1">das hatte ich auch schon ausprobiert, dabei passiert aber beim Versuch den Designer anzuzeigen das:
Fehler 1 Die Metadaten für die Assembly "WpfApplication2" konnten nicht geladen werden. Möglicherweise wurde diese Assembly aus dem Web heruntergeladen. Siehe http://go.microsoft.com/fwlink/?LinkId=179545. Fehler: Die Datei oder Assembly "WpfApplication2" oder eine Abhängigkeit davon wurde nicht gefunden. Der Vorgang wird nicht unterstützt. (Ausnahme von HRESULT: 0x80131515) G:\Development\VB.NET 2010\testprojects\WPF\WpfApplication2\MainWindow.xaml 1 1 WpfApplication2
Fehler 2 Der local:Settings-Typ wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und alle Assemblys, auf die verwiesen wird, müssen erstellt worden sein. G:\Development\VB.NET 2010\testprojects\WPF\WpfApplication2\MainWindow.xaml 11 26 WpfApplication2
Merkwürdigerweise lässt sich die Anwendung aber kompilieren und ausführen.
Dafür habe ich jetzt Ursache gefunden. Meine gesamte Entwicklung liegt auf meinem Server(File-Server, ganz normales Netzwerk). Wenn ich das Projekt von dort lade, erhalte ich die Fehler. Kopiere ich das Projekt aber nun auf ein lokales Laufwerk und lade es dann, dann sind die Fehler weg und der Designer zeigt das Window an.
Dafür brauche ich jetzt dringends eine Lösung. Ich will nicht jedes mal die Projekte hin und her kopieren.
--
Gruß Scotty
-
Das Problem kannst du umgehen, indem du UI und Logik trennst (separate Projekte) und nach Änderungen in der Logik erst einmal eine fehlerfreie Assembly erstellst.
Hallo Peter,
das habe ich probiert, jetzt erhalte ich:
Fehler 1 Das Tag "Setting" ist im XML-Namespace "clr-namespace:ClassLibrary1" nicht vorhanden. Zeile 11 Position 26. G:\Development\VB.NET 2010\TestProjects\WPF\WpfApplication2\MainWindow.xaml 11 26 WpfApplication2
Fehler 2 Der local:Setting-Typ wurde nicht gefunden. Alle Assemblyverweise müssen vorhanden sein, und alle Assemblys, auf die verwiesen wird, müssen erstellt worden sein. G:\Development\VB.NET 2010\TestProjects\WPF\WpfApplication2\MainWindow.xaml 11 26 WpfApplication2
Ich habe eine ClassLibrary erstellt und dort meine Setting-Klasse hinein geschoben. Das Projekt kompiliert ind in der Wpf-Anwendung einen Verweis auf diese Dll gesetzt. Dann habe ich den XAML-Code wie folgt geändert:
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:ClassLibrary1" Title="MainWindow" Height="350" Width="525"> <Grid> <TextBox Height="23" HorizontalAlignment="Left" Margin="10,10,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120"> <TextBox.Text> <Binding Path="Min" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <local:Setting MinValue="0"/> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> </Grid> </Window>
An meiner Setting-Klasse habe ich nichts geändert. Wie schon im anderen Posting erwähnt, tritt der Fehler nur beim Laden vom Netzlaufwerk auf.
--
Gruß Scotty
-
Hallo Karsten,
zum Thema "Visual Studio Projekt auf Netzlaufwerken" gab es ja schon einige Diskussionen. Die Kernaussage war: Sollte man vermeiden. Am elegantesten umgeht man das hin- und herkopieren mit einer Sourcecodeverwaltung, sei es TFS Basic oder Subversion. Damit hat man auch noch paar andere Vorteile.
Work With .NET Projects From a Network Share
http://weblogs.asp.net/rmclaws/archive/2007/03/22/work-with-net-projects-from-a-network-share.aspxVielleicht kannst Du damit ja Dein Problem lösen. Wobei die Security Beschränkung ab .NET 3.5 SP1 aufgehoben sein soll.
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort vorgeschlagen Robert BreitenhoferModerator Mittwoch, 30. Juni 2010 16:16
- Als Antwort markiert Thorsten DörflerModerator Samstag, 31. Juli 2010 15:39