Laden...

Forenbeiträge von itstata Ingesamt 302 Beiträge

08.05.2011 - 10:28 Uhr

Der Thread ist nicht tot zu bekommen:

Erstmal danke für deinen Link.
Damit ich einmal zum Ende komme habe ich die ganze Sache nun händisch implementiert. Ich weise also die Werte manuell zu. Die Updateproblematik ist mir klar geworden, aber warum zwei Datensätze erstellt werden nicht wirklich.

Ich hoffe in den kommenden Versionen gibts in diesem Bereich noch Verbesserungen. An sich ist das Binding ja eine tolle Sache.

06.04.2011 - 12:01 Uhr

Na dann...Bestens. Danke für die Auflösung. Das ist aber auch scheiße Dokumentiert.

06.04.2011 - 11:35 Uhr

Noch eine kurze Nachfrage:

Bedeutet das, dass durch die Nutzung des Modelbindings gar kein UpdateModel mehr brauche? Ich hoffe ich hab dich da nicht falsch verstanden.

06.04.2011 - 10:44 Uhr

Hallo,

gleiches Verhalten kann ich bei mir beobachten, aber ist das nicht ein Bug?

Ich meine, es gibt ja nur zwei Lösungen:

  1. Kein UpdateModel verwenden (manuelles Zuweisen der Änderungen)
  2. Context vorher von der zu aktualisierenten Entität befreien (also unsauber einfach löschen)
01.04.2011 - 12:24 Uhr

Oh je...da ahne ich ja nichts Gutes. Ich werd am Wochenende mal noch mal nach diesem Problem gucken. Vielleicht hab ich ja Glück. Meistens denkt man ja, dass das Problem vor dem Rechner sitzt.

31.03.2011 - 18:56 Uhr

Hallo Leute,

ich hab ein Objekt Zeiterfassung welches in der Businesslogik eine Funktion CreateZeiterfassung() hat. Dort wird einfach ein neues Objekt mit einigen Standardwerten (wie z.B. Datum = Datetime.Now etc.) angelegt. Da ich diese Logik auch in einer Wpf-Anwendun nutze möchte ich diese Funktion auch im Web-Frontend nutzen.
Hier einmal der Code, wie ich es derzeit realisiert habe:


public ActionResult Edit(int id)
        {
            var zeiterfassung = Zeiterfassungen.SingleOrDefault(a => a.ZeiterfassungId == id);
            if (zeiterfassung == null)
            {
                zeiterfassung = EntityService.ZeiterfassungenService.CreateZeiterfassung();
            }

            var auftraege = EntityService.Auftraege.ToList();
            FillDropDownLists(zeiterfassung.ZeiterfassungId, zeiterfassung.AuftragId);
            return View("Edit", zeiterfassung);
        }

In der Edit-Action wird also einfach ein neues Objekt angelegt. Ist das Objekt bereits vorhanden wird das vorhandene Objekt angezeigt. Soweit alles klar.


        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Save(Zeiterfassung zeiterfassung)
        {
            try
            {
                var zeiterfassungFromDb = EntityService.ZeiterfassungenService.Zeiterfassungen.SingleOrDefault(a => a.ZeiterfassungId == zeiterfassung.ZeiterfassungId);
                
                if (zeiterfassungFromDb == null)
                {
                    zeiterfassungFromDb = EntityService.ZeiterfassungenService.CreateZeiterfassung();
                }

                zeiterfassung.Auftrag = EntityService.Auftraege.SingleOrDefault(a => a.AuftragId == zeiterfassung.AuftragId);
                zeiterfassung.Taetigkeitart = EntityService.ZeiterfassungenService.Taetigkeitarten.SingleOrDefault(t => t.TaetigkeitartId == zeiterfassung.TaetigkeitartId);
                zeiterfassung.Person = GetMitarbeiter();
                TryUpdateModel(zeiterfassungFromDb);
                
                string validationList = zeiterfassung.ValidationList();

                if (string.IsNullOrEmpty(validationList))
                {
                    EntityService.SaveChanges();
                }
                else
                {
                    ViewData["ValidationErrors"] = validationList;
                    FillDropDownLists(zeiterfassung.ZeiterfassungId, zeiterfassung.AuftragId);
                    return View("Edit", zeiterfassung);
                }

                return null;
            }
            catch
            {
                FillDropDownLists(zeiterfassung.ZeiterfassungId, zeiterfassung.AuftragId);
                return View("Edit");
            }
        }

Die Save-Action liest alle geänderten Werte ein und macht ein Update oder erstellt einen neuen Eintrag. Und jetzt kommt mein Problem: Mit diesem Code werden zwei Datensätze in der Datenbank angelegt (Variablen: 'zeiterfassung' und 'zeiterfassungFromDb'). Sieht jemand meinen Fehler?

18.03.2011 - 18:02 Uhr

Geile Sache! Die Validierung hinzuzufügen kann ich über eine Validate(propertyXy)-Methode schnell implementieren.

Danke für das ausführliche Beispiel!

18.03.2011 - 14:06 Uhr

Ich hab da noch mal eine Frage:

Wenn ich z.B. eine Klasse Auto mit einer Klassenvariable Hersteller habe, dann würde ich ja folgendes schreiben:


<%= HTML.DropDownListFor(model=>model.Hersteller, ViewData["...") %>

In meiner Action wird dann das Objekt hochgesendet


public ActionResult Edit( Person person )
{
   if( ModelState.IsValid )
   {
      TryUpdateModel ( person );
      EntityService.SaveChanges();
   }

   return View ( "Edit" );
}

Bei mir ist allerdings Hersteller als "required" deklariert und Modelstate.IsValid bringt demnzufolge "false" zurück. Selbst wenn ich diese Beziehung per Hand nachlade wird Modelstate "false" bleiben. Wie ist denn dabei das klassische Vorgehen?

17.03.2011 - 20:53 Uhr

O.K. Danke für die Kritik, ich werde die Methode umbauen und dann hoffen, dass die doppelten Einträge nicht mehr erscheinen 😃

17.03.2011 - 20:43 Uhr

Ich verschärfe jetzt das Problem mal noch weiter:
DateTime? 'Pause' muss ich wegen SQL-Server 2005 leider als DateTime abbilden. In der Sicht formartiere ich diesen Wert dann zum Timespan. In den Postdaten wird dann natürlich kein DateTime hoch gesendet. Dann müsste ich mir wahrscheinlich noch ViewModel-Wrapper zu Hand nehmen oder gibts einen einfachen Weg?

17.03.2011 - 20:34 Uhr

ja hat es, ich habe zwei 1:n Beziehungen mit denen die automatische Zuweisung leider nicht geklappt hat. Ich hab da eine ganze Weile rumprobiert.

17.03.2011 - 19:37 Uhr

Hallo Leute,

ich versuche gerade mein Model im Controller zu validieren. Leider kommen einige Werte in Html.ValidationSummary() redundant vor. Das ist für mich sehr verwunderlich, zumal ich keinen konkreten Anhaltspunkt dafür finde. Vielleicht sieht jemand von euch das auf den ersten Blick:


  [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int auftragsbearbeitungId, int auftragId, int taetigkeitartId, string taetigkeit, DateTime? datumTs, string pauseTs, string dienstbeginnTs, string dienstendeTs, string fahrtzeitAktivTs, string fahrtzeitPassivTs)
        {
            try
            {
                var auftragsbearbeitungFromDb = GetOriginalAndUpdateValues(auftragsbearbeitungId, auftragId, taetigkeitartId, taetigkeit, datumTs, pauseTs, dienstbeginnTs, dienstendeTs, fahrtzeitAktivTs, fahrtzeitPassivTs);

// Dictionary des Modelstate ist hier laut Debugger noch leer
                TryUpdateModel(auftragsbearbeitungFromDb);
                AddLogicalValidationErrors(auftragsbearbeitungFromDb);

                if (ModelState.IsValid)
                {
                    EntityService.SaveChanges();
                }
                else
                {
                    FillDropDownLists(auftragsbearbeitungId, auftragId);
                    return View("Edit", auftragsbearbeitungFromDb);
                }

                return null;
            }
            catch
            {
                FillDropDownLists(auftragsbearbeitungId, auftragId);
                return View("Edit");
            }
        }

Die Validierung ist über IDataErrorInfo implementiert. In meinem WPF-Frontend klappt diese Validierung auch.


public interface IAuftragsbearbeitung
    {
        [Required(ErrorMessage = "'AuftragsbearbeitungId' ist ein Pflichtfeld")]
        [Range(0, int.MaxValue, ErrorMessage = "'AuftragsbearbeitungId' darf nicht negativ sein")]
        int AuftragsbearbeitungId { get; set; }

        [Required(ErrorMessage = "'Auftrag' ist ein Pflichtfeld")]
        Auftrag Auftrag { get; set; }

        [Required(ErrorMessage = "'Tätigkeitart' ist ein Pflichtfeld")]
        Taetigkeitart Taetigkeitart { get; set; }

        [Required(ErrorMessage = "'Tätigkeit' ist ein Pflichtfeld")]
        [DisplayFormat(ConvertEmptyStringToNull = false)]
        string Taetigkeit { get; set; }

        [PlausibleDateTime(ErrorMessage = "'Datum' muss später als das Jahr 1990 sein")]
        [Required(ErrorMessage = "'Datum' ist ein Pflichtfeld")]
        DateTime Datum { get; set; }

        [DateTimeTimeSpan(15, 1440, ErrorMessage = "'Dienstbeginn'  ist nicht korrekt")]
        [Required(ErrorMessage = "'Dienstbeginn' ist ein Pflichtfeld")]
        DateTime Dienstbeginn { get; set; }

        [DateTimeTimeSpan(15, 1440, ErrorMessage = "'Dienstende'  ist nicht korrekt")]
        [Required(ErrorMessage = "'Dienstende' ist ein Pflichtfeld")]
        DateTime Dienstende { get; set; }

        [DateTimeTimeSpan(15, 1440, ErrorMessage = "'Pause'  ist nicht korrekt")]
        DateTime? Pause { get; set; }

        [DateTimeTimeSpan(15, 1440, ErrorMessage = "'FahrtzeitAktiv'  ist nicht korrekt")]
        DateTime? FahrtzeitAktiv { get; set; }

        [DateTimeTimeSpan(15, 1440, ErrorMessage = "'FahrtzeitPassiv'  ist nicht korrekt")]
        DateTime? FahrtzeitPassiv { get; set; }

        TimeSpan Arbeitszeit { get; }

        bool Innendienst { get; set; }

        bool Aussendienst { get; set; }

        bool Auftragszeit { get; set; }

        bool Zweimannmesstrupp { get; set; }
    }

03.03.2011 - 12:37 Uhr

Nimm den catch-block mal testweise raus. Besser wäre natürlich ein Logging-Mechanismus 😃

03.03.2011 - 12:21 Uhr

Kommt das Fenster von dir? Das scheint auf jeden Fall keine Fehlermeldung vom Framework zu sein, sieht eher nach einer bereits abgefangenen Exception aus. Leider fehlen da schon alle Informationen.

03.03.2011 - 12:04 Uhr

Kannst du mal bitte die Ganze Fehlermeldung mit Stacktrace zeigen?

03.03.2011 - 11:37 Uhr

und die Dll hast du auch auf den anderen Rechner kopiert?

03.03.2011 - 11:29 Uhr

Hallo,

hört sich so an, als wenn du die Mathlab.dll benutzt und diese nicht auf dem anderen Rechner verfügbar ist. Versuch mal im Projektexplorer auf die Mathlab.ddl die Eigenschaft "immer kopieren" auf ja zu stellen. Diese musst du dann nach dem kompilieren mit kopieren.

02.03.2011 - 09:58 Uhr

Hallo,

ich bin auf der Suche nach einem RTF-Exporter mit dem ihr gute Erfahrungen gemacht habt. Die Lizenz sollte jedoch so definiert sein, dass man seinen Quellcode nicht veröffentlichen muss.

Konkret muss ein RTF-Template eingelesen und editiert werden.

Kann mir jemand einen Rat geben?

bei Codeplex gibts z.B. RTF 2 .Net

24.01.2011 - 19:50 Uhr

Dann liegt es wahrscheinlich an meiner englischen Version.

24.01.2011 - 19:28 Uhr

Besten Dank,
hab den Code korregiert - leider besteht das Problem mit dem DatePicker noch ("Select a date")

@ErfinderDesRades
benutzt du Wpf-Toolkit oder den nativen Datepicker?

24.01.2011 - 18:55 Uhr

Hallo,

ich habe bereits meine Kultur in der App.config eingestellt...überall geht es auch - nur nicht im Datepicker. Scheinbar wurde da was vergessen zu implementieren 😃


  Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
  Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
  FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

p.s. das VB sieht ja wirklich gruselig aus 😃

24.01.2011 - 18:22 Uhr

Hallo,

ich habe meine Anwendung auf Lokalisierung 'DE-de' laufen und hätte nun erwartet, dass der Datepicker auch lokalisiert wird. Leider steht dort bei nicht ausgewähltem Datum "Select a date", was in einer deutschen Anwendung eher schlecht aussieht 😃

Bei Google habe ich nur Lösungen über das WPF-Toolkit & neukompilieren gefunden. Konnte jemand dieses Problem auf konventionelle Weise lösen?

Besten Gruß

16.01.2011 - 19:13 Uhr

Die BindingOperations Klasse ist genau das, was ich gesucht hab. Damit bekomme ich dann von der Grid-Spalte das Binding heraus und kann filtern. Besten Dank!

16.01.2011 - 18:42 Uhr

Hallo,

ich programmiere mir gerade ein etwas angepasstes DataGrid (mit Filtermöglichkeiten). Ich benötige nun jedoch Informationen über das Binding des UserControls. Ich möchte also z.B. wissen, an welchen Property DataGridColumn xy gebunden ist. Kann mir jemand sagen, wo ich das finde?

Anbei ein Beispiel:


 <Grid DataContext="{Binding Test.Name}"> 
            
    </Grid>

Mich interessieren also die Metadaten aus dem XAML...

05.01.2011 - 16:26 Uhr

Jein, unser Kunde benötigt auch zur Laufzeit diese Protokollierungsdaten. Trotzdem ist ein Profiler wohl trotzdem sinnvoll.

Auf jeden Fall schade, falls es keine wirkliche Alternative für PostSharp gibt.

05.01.2011 - 15:52 Uhr

ja, genau - es soll eine Statistik dabei heraus kommen. Wir sprechen einen dritten Service an der nicht gerade performant ist. Dadurch müssen wir gucken, wo wir selbst optimieren müssen.

Ist PostSharp nicht kostenpflichtig?

@talla
mit nicht vertrauenswürdig meine ich, dass es ein verbreitetes und bis heute weitergepflegtes Framework sein sollte.

05.01.2011 - 15:01 Uhr

Hallo,

ich habe das konrete Problem, dass ich den Auruf von Webservice-Methoden protokollieren muss. Dazu zählen z.B. die Anzahl der Aufrufe, Ausführungszeit etc..

Eigentlich ist dies ja ein Musterbeispiel für AOP, jedoch habe ich noch kein kostenloses vertrauenswürdiges Framework gefunden. Vielleicht hat jemand dazu noch einen Tipp.

Kann das .Net-Framework hier duch andere Funktionen Hilfe leisten? Momentan nutze ich eine eigene Klasse die ich am Start bzw. Ende der Methode aufrufe. Die Anzahl der zu protokollierenden Methoden steigt jetzt jedoch stark.

Besten Gruß

24.12.2010 - 23:40 Uhr

Du solltest erstmal die doku lesen. Ansonsten ist eine von vielen Lösungen folgende: die Anmeldung des konkreten Nutzers für seine Datenbank als dbo-owner zu konfigurieren.
Das ist erstmal das einfachste.

21.12.2010 - 10:08 Uhr

Na ich nehme doch Notepad++ :p

21.12.2010 - 09:36 Uhr

Jetzt übertreibst du aber schon etwas... das ist ja wirklich keine großes Refactoring was ich hier verlange. Zumal das Studio ja auch Geld kostet - wozu dann ein extra Tool?

21.12.2010 - 08:48 Uhr

Ich hab den R# er nun als Testversion installiert. Leider muss ich auch mit diesem Tool extra noch Strg+Space drücken. Kann der den Variablennamen nicht automatisch generieren?

20.12.2010 - 21:24 Uhr

Aber nach meiner Meinung könnte VS auch noch etwas aufschließen...immerhin bringen die Powertools schon mal eine ganz Menge. Ich verlange ja kein Hexenwerk von MS 😃

20.12.2010 - 21:13 Uhr

Wie ist die Performance von Resharper? Bisher habe ich nicht nur positives gehört.

20.12.2010 - 20:01 Uhr

Auch wenn der Beitrag schon etwas verstaubt ist...doch noch ein kleiner Hinweis.

Wenn du lediglich eine neue Instanz von einer Sicht benötigst, so kannst du das über das über das PartCreationPolicy-Attribut lösen.


 [Export(typeof(IPersonView)), PartCreationPolicy(CreationPolicy.NonShared)]
    public partial class PersonView : UserControl, IPersonView
    {
        public PersonView()
        {
            InitializeComponent();
        }
    }

Das ist eine feine Sache, denn die Sicht kann somit mehrmals in deiner Anwendung verwendet werden. Ich stand genau vor dem gleichen Problem, ansonsten sind die Sichten nicht viel wert.



// neue Instanz da CreationPolicy.NonShared
IPersonView personView = container.GetExportedValue<IPersonView>();

20.12.2010 - 16:07 Uhr

😃 haha... leider kostenpflichtig.
Ich weiß nicht, wir sind jetz bei VS 2010 und noch immer sind solche billigen Sachen nicht möglich. Für mich wäre das eine große Erleichterung.

20.12.2010 - 16:00 Uhr

Hallo,

ich würde gerne, dass beim Erstellen einer neuen Variable automatisch der Typ als Variablenname generiert wird. Gibt es dafür eine Einstellung in VS? Ich selbst hab die Productivity-Tools - diese bieten dies leider nicht.

Beispiel:


HttpConnector httpConnector;

19.12.2010 - 13:35 Uhr

:p du siehst...so ganz drin im MVVM bin ich noch nicht 😃

19.12.2010 - 13:20 Uhr

Danke für die schnelle Antwort. Im ersten Codeschnipsel hat die Sicht praktisch dem ViewModel gesagt, ob es valide ist...

Hier jetzt meine neue Lösung - ich hoffe, dass ist so gangbar.


 public class AngebotViewModel : ViewModel<IAngebotView>
    {
        private Angebot angebot;
        private bool isValid = true;
//...

   public bool IsValid
        {
            get { return isValid; }
            set
            {
                if (isValid != value)
                {
                    isValid = value;
                    RaisePropertyChanged("IsValid");
                }
            }
        }

        public Angebot Angebot
        {
            get { return angebot; }
            set
            {
                if (angebot != value)
                {
                    angebot = value;
                    angebot.PropertyChanged += new PropertyChangedEventHandler(angebot_PropertyChanged);
                    RaisePropertyChanged("Angebot");
                    RaisePropertyChanged("IsEnabled");
                }
            }
        }

        private void angebot_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            Angebot angebot = sender as Angebot;
            isValid = string.IsNullOrEmpty(angebot.Validate());
        }
//...
}

19.12.2010 - 12:28 Uhr

Hallo,

ich habe derzeit folgenden Code in meinem Code-Behind:


 [Export(typeof(IAngebotView))]
    public partial class AngebotView : UserControl, IAngebotView
    {
        private readonly HashSet<ValidationError> errors = new HashSet<ValidationError>();

        public AngebotView()
        {
            InitializeComponent();
            Validation.AddErrorHandler(this, ErrorChangedHandler);
        }

        private AngebotViewModel ViewModel { get { return DataContext as AngebotViewModel; } }

        public void FocusFirstControl()
        {
           bezeichnungBox.Focus();
        }

        private void ErrorChangedHandler(object sender, ValidationErrorEventArgs e)
        {
            if (e.Action == ValidationErrorEventAction.Added)
            {
                errors.Add(e.Error);
            }
            else
            {
                errors.Remove(e.Error);
            }
            ViewModel.IsValid = !errors.Any();
        }
    }

Über die den ErrorChangeHandler wird ein Property im Viewmodel gesetzt (IsValid).
Letztendlich interessiert mich jedoch nur, ob überhaupt Validierungsfehler vorliegen. Mir scheint der Code (aus einem Beispiel übernommen) zu kompliziert. Außerdem würde ich gerne den Code-Behind frei von dieser Logik halten.

Gibt es eine Möglichkeit, Validierungsfehler der Sicht, direkt im Viewmodel als Property zu setzen?

12.12.2010 - 18:35 Uhr

Alles klar...

danke für die Antworten, der Ansatz mit diesen globalen Resourcen fand ich eh Mist. Das Interface für das Repository hatte ich bereits übergeben...klappt so gut.

12.12.2010 - 17:07 Uhr

Hallo erstmal danke für die Antwort!

Ein Repository für die Personen wird bereits über DI reingegeben. Es ist auch kein Problem, wenn die Viewmodels direkt mit den Repositories arbeiten?

Besten Gruß

12.12.2010 - 16:32 Uhr

Hallo,

ich bin gerade dabei mich in WPF einzuarbeiten und nutze dafür MVVM.
Im meinem Beispielprogramm können Personen, Adressen etc. verwaltet werden. Daher habe ich auch eine Sicht (PersonView) die genau eine einzelne Person mit Adresse und Anrede anzeigt.

Um die ComboBoxen mit z.B. Anreden zu füllen möchte ich diese als statische Datasource aus der DB laden. Ich bin allerdings noch etwas unsicher, was der bessere Weg ist - Daten über das ViewModel beziehen oder über eine globale Resource. In der Beispielanwendung von WAF (BookLibrary) werden beispielweise Programmsprachen in einer globalen Resource gehalten.

Ich persönlich finde die globalen Resourcen ziemlich unsauber, da ich wichtige Daten nicht im ViewModel habe. Hierzu würde mich Eure Meinung interessieren.

Gruß

30.10.2010 - 17:25 Uhr

Das ist gut zu Wissen, ich hatte nämlich kurzfrist den DataContext im Setter auf AdressSource gestzt - das hätte dann eh nicht geklappt

30.10.2010 - 17:17 Uhr

ich hab nun die Datasource mit der übergebenen Adresse gestetzt. Die Exception ist nun weg, allerdings bekomme ich auch keine Daten auf den Schirm :p

Beim Debuggen ist mir aufgefallen, dass der Setter von AdresseSource nicht aufgerufen wird.

30.10.2010 - 16:47 Uhr

Hast du vielleicht noch ein gutes Tutorial für die Erstellung des Properties?
Ich bin mit meinen bisherigen Versuchen leider gescheitert.


  public partial class AdresseUC : UserControl
    {
        public static readonly DependencyProperty AdresseSourceProperty =
     DependencyProperty.Register("AdresseSource", typeof(Adresse), typeof(AdresseUC));

        public object AdresseSource
        {
            get
            {
                return (object)GetValue(AdresseSourceProperty);
            }
            set
            {
                SetValue(AdresseSourceProperty, value);
            }
        }

der Aufruf:

 <my1:AdresseUC x:Name="adresseUC1" AdresseSource="{Binding Path=Adresse}" Grid.Column="3" Grid.RowSpan="6"  Margin="1,1,10,0" Height="199" VerticalAlignment="Top" />

Exception:


System.Windows.Data Error: 40 : BindingExpression path error: 'PLZ' property not found on 'object' ''BindingListCollectionView' (HashCode=22559558)'. BindingExpression:Path=PLZ; DataItem='BindingListCollectionView' (HashCode=22559558); target element is 'TextBox' (Name='pLZTextBox'); target property is 'Text' (type 'String')

30.10.2010 - 14:26 Uhr

klappt - einfach genial...

jetzt erscheint mir das Verhalten von WPF auch logisch. Den zusätzlichen Property werde ich setzen.

Beste Grüße

30.10.2010 - 12:05 Uhr

Hallo zusammen,

ich komme momemtan leider nicht beim binden meines User-Controls weiter - vielleicht könnt ihr mir helfen?

Ich hab folgende Entitäten:

  • Person

  • Adresse

  • Person hat einen Property Adresse (1:1)

Weiterhin habe ich ein WPF-Fenster in dem ich Eigenschaften der Person anzeige:


<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:vb="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="318" Width="552" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:my="clr-namespace:WpfApplication1" Loaded="Window_Loaded">
    <Window.Resources>
        <CollectionViewSource x:Key="personViewSource" d:DesignSource="{d:DesignInstance my:Person, CreateList=True}" />
    </Window.Resources>
    <Grid DataContext="{StaticResource personViewSource}">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="265*" />
            <ColumnDefinition Width="265*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="55*" />
            <RowDefinition Height="256*" />
        </Grid.RowDefinitions>
        <DataGrid AutoGenerateColumns="False" EnableRowVirtualization="True" Grid.Row="1" ItemsSource="{Binding}" Name="personDataGrid" RowDetailsVisibilityMode="VisibleWhenSelected" Margin="0,1,8,0">
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="person_IdColumn" Binding="{Binding Path=Person_Id}"  Header="Person Id" Width="SizeToHeader" />              
                <DataGridTextColumn x:Name="nameColumn" Binding="{Binding Path=Name}" Header="Name" Width="SizeToHeader" />
                <DataGridTextColumn x:Name="vornameColumn" Binding="{Binding Path=Vorname}" Header="Vorname" Width="SizeToHeader" />
            </DataGrid.Columns>
        </DataGrid>
        <TextBlock  x:Name="tbTest" Grid.Column="1"  Grid.Row="0" Text="{Binding ElementName=personDataGrid,Path=SelectedItem.Adresse.PLZ}" />
        <vb:AdresseUC x:Name="AdresseUC" Grid.Column="1"  Grid.Row="1" DataContext="{Binding ElementName=personDataGrid,Path=SelectedItem.Adresse}" />
    </Grid>
</Window>

Im unteren Teil versuche ich ein User-Control einzubinden, welches die Adressinformationen zu dieser Person anzeigt.
Dazu habe ich besitzt das "AdresseUC" ein Binding vom Typ-Adresse. Nach meiner Meinung brauch ich ja nur das Adress-Objekt in das User-Control reichen? Zur Kontrolle habe ich direkt im Fenster einmal die PLZ ausgegeben ("tbTest") - das klappt soweit.

Habe ich hier einen Denkfehler oder wo ist der Fehler im Code?

anbei noch das XAML vom AdressUC.

<UserControl x:Class="WpfApplication1.AdresseUC"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300" xmlns:my="clr-namespace:WpfApplication1" Loaded="UserControl_Loaded">
    <UserControl.Resources>
        <CollectionViewSource x:Key="adresseViewSource" d:DesignSource="{d:DesignInstance my:Adresse, CreateList=True}" />
    </UserControl.Resources>
    <Grid>
        <Grid DataContext="{StaticResource adresseViewSource}" Name="grid1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <Label Content="PLZ:" Grid.Column="0" Grid.Row="3" HorizontalAlignment="Left" Margin="3" VerticalAlignment="Center" />
            <TextBox Grid.Column="1" Grid.Row="3" Height="23" HorizontalAlignment="Left" Margin="3" Name="pLZTextBox" Text="{Binding Path=PLZ, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" />
        </Grid>
    </Grid>
</UserControl>

26.10.2010 - 09:16 Uhr

Dafür gibts bei Codeplex ein Framework.

12.10.2010 - 10:37 Uhr

Du musst dich entweder mit Regulären Ausdrücken an die HTML-Tags heften oder du verwendest eine LINQ - HTML Erweiterung um direkt die Tags auszulesen.

12.10.2010 - 08:29 Uhr

Über Xml oder was meinst du?
XDocument

Wie hast du die Webseite denn eingelesen?