Hallo liebe Forum-Mitglieder,
ich bin ein WPF-Neuling und komme eigentlich aus der WinForms - VB.NET-Welt. Ich habe mich aber schon einige Zeit mit WPF beschäftigt und auch schon fleißig gelesen (Internet und Buch mit Beispielen).
Bei einer Sache hakt es jetzt aber bei mir und ich hoffe, ihr könnt mir weiter helfen.
Ich habe ein ganz simples Testprogramm: im MainWindow ist eine TextBox, ein Label und ein Button. Das Label ist an die Textbox gebunden und das NotifyPropertyChanged funktioniert auch, soll heißen: wenn ich den Text in der Textbox ändere, ändert sich auch das Label entsprechend mit. Die TextBox ist über ein Binding an eine Property gebunden.
Jetzt kommt das Problem: wenn ich den Button klicke, möchte ich über das auslösende Event den Text der TextBox ändern, und zwar über die Property. Und genau das bekomme ich nicht hin.
XAML-Code MainWindow:
<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:Test_INotifyPropertyChanged"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox x:Name="TextBox"
Text="{Binding Beginn, UpdateSourceTrigger=PropertyChanged}"
FontFamily="Calibri"
FontSize="26.667"
FontWeight="Bold"
HorizontalContentAlignment="Center" Margin="0,12,0,245"
/>
<Label x:Name="Label"
Content="{Binding ElementName=TextBox , Path=Text }"
HorizontalAlignment="Left"
VerticalAlignment="Center"
RenderTransformOrigin="0.6,0.5"
Margin="50,0,0,0"/>
<Button x:Name="Button"
Width="127"
Height="55"
/>
</Grid>
</Window>
MainWindow Code behind:
Imports Test_INotifyPropertyChanged.MainViewModel
Imports System.ComponentModel
Class MainWindow
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
DataContext = New MainViewModel
End Sub
Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button.Click
End Sub
End Class
Code für MainViewModel:
Imports System.ComponentModel
Public Class MainViewModel : Inherits NotifyPropertyChangedBase
Private _Beginn As String = "Beginn"
Public Property Beginn As String
Get
Return _Beginn
End Get
Set(value As String)
If _Beginn <> value Then
_Beginn = value
OnPropertyChanged(New PropertyChangedEventArgs("Beginn"))
End If
End Set
End Property
End Class
Code für NotifyPropertyChanged:
Imports System.ComponentModel
Public MustInherit Class NotifyPropertyChangedBase : Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Overridable Sub OnPropertyChanged(e As PropertyChangedEventArgs)
RaiseEvent PropertyChanged(Me, e)
End Sub
End Class
Ich hoffe, ihr habt einen Tipp für mich.
Vielen Dank und viele Grüße
ich bin ein WPF-Neuling und komme eigentlich aus der WinForms - VB.NET-Welt. Ich habe mich aber schon einige Zeit mit WPF beschäftigt und auch schon fleißig gelesen (Internet und Buch mit Beispielen).
Bei einer Sache hakt es jetzt aber bei mir und ich hoffe, ihr könnt mir weiter helfen.
Ich habe ein ganz simples Testprogramm: im MainWindow ist eine TextBox, ein Label und ein Button. Das Label ist an die Textbox gebunden und das NotifyPropertyChanged funktioniert auch, soll heißen: wenn ich den Text in der Textbox ändere, ändert sich auch das Label entsprechend mit. Die TextBox ist über ein Binding an eine Property gebunden.
Jetzt kommt das Problem: wenn ich den Button klicke, möchte ich über das auslösende Event den Text der TextBox ändern, und zwar über die Property. Und genau das bekomme ich nicht hin.
XAML-Code MainWindow:
<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:Test_INotifyPropertyChanged"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox x:Name="TextBox"
Text="{Binding Beginn, UpdateSourceTrigger=PropertyChanged}"
FontFamily="Calibri"
FontSize="26.667"
FontWeight="Bold"
HorizontalContentAlignment="Center" Margin="0,12,0,245"
/>
<Label x:Name="Label"
Content="{Binding ElementName=TextBox , Path=Text }"
HorizontalAlignment="Left"
VerticalAlignment="Center"
RenderTransformOrigin="0.6,0.5"
Margin="50,0,0,0"/>
<Button x:Name="Button"
Width="127"
Height="55"
/>
</Grid>
</Window>
MainWindow Code behind:
Imports Test_INotifyPropertyChanged.MainViewModel
Imports System.ComponentModel
Class MainWindow
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
DataContext = New MainViewModel
End Sub
Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button.Click
End Sub
End Class
Code für MainViewModel:
Imports System.ComponentModel
Public Class MainViewModel : Inherits NotifyPropertyChangedBase
Private _Beginn As String = "Beginn"
Public Property Beginn As String
Get
Return _Beginn
End Get
Set(value As String)
If _Beginn <> value Then
_Beginn = value
OnPropertyChanged(New PropertyChangedEventArgs("Beginn"))
End If
End Set
End Property
End Class
Code für NotifyPropertyChanged:
Imports System.ComponentModel
Public MustInherit Class NotifyPropertyChangedBase : Implements INotifyPropertyChanged
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Protected Overridable Sub OnPropertyChanged(e As PropertyChangedEventArgs)
RaiseEvent PropertyChanged(Me, e)
End Sub
End Class
Ich hoffe, ihr habt einen Tipp für mich.
Vielen Dank und viele Grüße