WPF OnPropertyChanged wird nicht geupdatet

Gast #4770971
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
Gast #4771754
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
Gast #4771993
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.
Gast #4772120
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren