C-Sharp WPF Binding TextBox.Text und Property MVVM
Hi @ All!
Komplett neu auf dem Gebiet WPF komme irgendwie mit dem Binding Textbox.Text zu Property und umgekehrt nicht zurecht. Es wird weder das Property aktualisiert beim Ändern des Textes in der Textbox, noch umgekehrt.
Meine Textbox ist im Xaml so definiert:
Das Property ist so definiert:
Testweise habe ich das Property aus der Main heraus geändert was natürlich funktioniert, das PropertyChanged ist aber immer null (??).
Hat jemand einen Tipp. Eventuell ein Beispiel? ich habe keine Ahnung warum es nicht funktioniert.
Danke für die Hilfe!
Mayho
Komplett neu auf dem Gebiet WPF komme irgendwie mit dem Binding Textbox.Text zu Property und umgekehrt nicht zurecht. Es wird weder das Property aktualisiert beim Ändern des Textes in der Textbox, noch umgekehrt.
Meine Textbox ist im Xaml so definiert:
<TextBox x:Name="textBox_Test" Height="19" TextWrapping="Wrap" TextAlignment="Center" VerticalAlignment="Bottom" Width="34" Margin="0,0,0,10"
Text="{Binding Path=Test, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
Das Property ist so definiert:
public class BaseCalc : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(String property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
private double _Test;
public double Test
{
get
{
return this._Test;
}
set
{
if (value != this._Test)
{
this._Test = value;
OnPropertyChanged("Test");
}
//OnPropertyChanged("Test");
}
}
}
Testweise habe ich das Property aus der Main heraus geändert was natürlich funktioniert, das PropertyChanged ist aber immer null (??).
Hat jemand einen Tipp. Eventuell ein Beispiel? ich habe keine Ahnung warum es nicht funktioniert.
Danke für die Hilfe!
Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300449
Url: https://administrator.de/forum/c-sharp-wpf-binding-textbox-text-und-property-mvvm-300449.html
Ausgedruckt am: 02.04.2025 um 04:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo Mayho,
hier mal ein Beispiel wie man es machen kann:
Man registriert eine DependencyProperty vergibt Ihr einen Namen definiert deren Typ, und erstellt dann eine Property mit dem selben Namen den man der DependencyProperty vergeben hat.
Im XAML Code vergibt man dann dem Window einen Namen z.B. MyControl und gibt in der Text-Eigenschaft der Textbox dann dieses Binding an:
Hier noch die kompletten Bestandteile des Beispiels:
Siehe auch:
How to data bind to property in WPF
Grüße Uwe
hier mal ein Beispiel wie man es machen kann:
Man registriert eine DependencyProperty vergibt Ihr einen Namen definiert deren Typ, und erstellt dann eine Property mit dem selben Namen den man der DependencyProperty vergeben hat.
Im XAML Code vergibt man dann dem Window einen Namen z.B. MyControl und gibt in der Text-Eigenschaft der Textbox dann dieses Binding an:
Text="{Binding ElementName=MyControl, Path=testProperty,Mode=TwoWay}"
Hier noch die kompletten Bestandteile des Beispiels:
XAML Code
<Window x:Class="PropertyBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PropertyBinding"
mc:Ignorable="d"
Title="Property Binding" Height="133.734" Width="222.38" Name="MyControl">
<Grid>
<TextBox x:Name="txt1" Height="23" Margin="10,10,10,0" TextWrapping="Wrap" VerticalAlignment="Top" Text="{Binding ElementName=MyControl, Path=testProperty,Mode=TwoWay}"/>
<Button x:Name="btnGetProp" Content="Get Property Value" Margin="10,38,10,0" VerticalAlignment="Top" RenderTransformOrigin="0.525,0.532" Click="btnGetProp_Click"/>
<Button x:Name="btnWriteProp" Content="Write Property Value" Margin="10,74,10,0" VerticalAlignment="Top" RenderTransformOrigin="0.525,0.532" Click="btnWriteProp_Click"/>
</Grid>
</Window>
CodeBehind:
using System.Windows;
namespace PropertyBinding
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public static DependencyProperty _testProperty = DependencyProperty.Register("testProperty", typeof(string), typeof(MainWindow));
public string testProperty {
get
{
return (string)GetValue(_testProperty);
}
set
{
SetValue(_testProperty, value);
}
}
private void btnGetProp_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(testProperty);
}
private void btnWriteProp_Click(object sender, RoutedEventArgs e)
{
testProperty = "Das ist ein Demotext";
}
}
}
How to data bind to property in WPF
Grüße Uwe
Aber hat das dann noch was mit MVVM zu tun?? Wie kann ich das umsetzen?
So wie ich es oben gemacht habe kannst du der ItemsSource der ComboBox auch die Liste (List<string>) zuweisen. Geht hier im Test problemlos.Für den aktuell ausgewählten Eintrag der Combobox kannst du das ebenfalls über eine weitere Property definieren. Bin da jetzt aber auch nicht so im Thema drin.
Die Möglichkeiten des Bindings für die SelectedN Einträge findest du auch hier erläutert
Difference between SelectedItem, SelectedValue and SelectedValuePath