Forum: PC-Programmierung WPF OnPropertyChanged wird nicht geupdatet


von Joel (Gast)


Lesenswert?

Hallo zusammen

Ich sage schonmal im vorraus ich bin relativ neu in der C#/WPF Welt 
somit wenn dies nur ein kleiner Fehler ist dann nicht gleich 
ausrasten.^^

So also zum Problem. wie ihr es oben im Titel schon sehen könnt wir 
OnPropertyChanged nicht geupdatet, also es it immer null.

XMAL mit dem Binding und allem:
1
<Window x:Class="Selectron_C_Bus_Calculator.View.PowerCalculatorView"
2
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4
        xmlns:local="clr-namespace:Selectron_C_Bus_Calculator.View"
5
        xmlns:viewmodel="clr-namespace:Selectron_C_Bus_Calculator.ViewModel"
6
        xmlns:view="clr-namespace:Selectron_C_Bus_Calculator.View"
7
        DataContext="{Binding PowerCalculatorViewModel}"
8
        Title="PowerCalculatorView" Height="550" Width="800">
9
    <Window.Resources>
10
        <DataTemplate DataType="{x:Type viewmodel:ExtensionViewModel}">
11
            <view:ExtensionView/>
12
        </DataTemplate>
13
    </Window.Resources>
14
    <Grid>
15
        <ListBox x:Name="listBox" MouseDown="listBox_MouseDown" Visibility="Visible" HorizontalAlignment="Left" Height="410" Margin="324,44,0,0" VerticalAlignment="Top" Width="468" BorderThickness="0" ItemsSource="{Binding Path=Extensions}">
16
            <ListBox.Resources>
17
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
18
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
19
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
20
            </ListBox.Resources>
21
        </ListBox>
22
        <ComboBox x:Name="Node" HorizontalAlignment="Left" Margin="120,25,0,0" VerticalAlignment="Top" Width="120"/>
23
    </Grid>
24
</Window>

OnPropertyChanged Code:
1
using System;
2
using System.ComponentModel;
3
4
namespace Selectron_C_Bus_Calculator.ViewModel
5
{
6
    public abstract class BaseViewModel : INotifyPropertyChanged
7
    {
8
        public event PropertyChangedEventHandler PropertyChanged;
9
        protected void RaisePropertyChanged(string propertyName)
10
        {
11
            var handler = PropertyChanged;
12
            if (handler != null) 
13
            {
14
                handler(this, new PropertyChangedEventArgs(propertyName));
15
            }
16
        }
17
    }
18
}

Code wo OnPropertyChanged aufgerufen wird:
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
7
namespace Selectron_C_Bus_Calculator.ViewModel
8
{
9
    public class ExtensionViewModel : BaseViewModel
10
    {
11
        private bool isenabled;
12
        private bool isenabled_number;
13
14
        public bool Isenabled
15
        {
16
            get
17
            {
18
                return isenabled;
19
            }
20
            set
21
            {
22
                isenabled = value; RaisePropertyChanged("Isenabled");
23
            }
24
        }
25
26
        public bool Isenabled_Number
27
        {
28
            get
29
            {
30
                return isenabled_number;
31
            }
32
            set
33
            {
34
                isenabled_number = value; RaisePropertyChanged("Isenabled_Number");
35
            }
36
        }
37
38
        public ExtensionViewModel(bool isenabled, bool isenablednumber)
39
        {
40
            this.isenabled = isenabled;
41
            this.isenabled_number = isenablednumber;
42
        }
43
    }
44
}

Wenn ich etwas vergessen habe probiere ich es so schnell wie möglich 
hinzuzufügen.

MFG
Joel

: Verschoben durch User
von Joel (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch die Zip Datei des Gesammten Projektes wenn das mehr aufschluss 
gibt

von valvestino (Gast)


Lesenswert?

Vielleicht habe ich es ja übersehen, aber ich kann in Deinem Code 
nirgendwo einen Konsumenten des Events PropertyChanged entdecken. 
Deshalb ist das Event auch immer null.

Du brauchst in Deiner GUI irgendwo sowas wie
1
...
2
extensionViewModelInstance.PropertyChanged += PropertyChangedHandler;
3
...
4
private void PropertyChangedHandler(object sender, PropertyChangedEventArgs args)
5
{
6
   // hier Code, der das Event bearbeitet, i.d.R. werden irgendwelche
7
   // GUI-Controls aktualisiert.   
8
}

Grüße
Markus

von Steinadler (Gast)


Lesenswert?

valvestino schrieb:
> Vielleicht habe ich es ja übersehen, aber ich kann in Deinem Code
> nirgendwo einen Konsumenten des Events PropertyChanged entdecken.
> Deshalb ist das Event auch immer null.
>
> Du brauchst in Deiner GUI irgendwo sowas wie...
> extensionViewModelInstance.PropertyChanged += PropertyChangedHandler;
> ...
> private void PropertyChangedHandler(object sender,
> PropertyChangedEventArgs args)
> {
>    // hier Code, der das Event bearbeitet, i.d.R. werden irgendwelche
>    // GUI-Controls aktualisiert.
> }
>
> Grüße
> Markus

Das wirst du in WPF nicht finden, dort wird das automatisch erzeugt.

Aber das zugehörige Binding existiert in der xaml-Datei nicht.

Und das Ereignis wird nur aufgerufen, nachdem der Konstruktor 
durchgelaufen ist. Das heißt, du musst die Eigenschaft dann auch aktiv 
von irgendwo her ändern. Die Zuweisung im Konstruktor löst das Ereignis 
noch nicht aus, da das Binding erst hinterher autmoatisch erzeugt wird.

von Joel (Gast)


Lesenswert?

Vielen Dank für die antworten! :)

Leider muss ich bei euch beiden sagen das ihr falsch liegt. Das Problem 
was nur das ich ausvershen die initialisierung des usercontrolls 
gelöscht habe und es bis vor 1 stunde nicht bemerkt habe......

MFG Joel

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.