C-Sharp WPF Binding TextBox.Text und Property MVVM (die 2.)
Hallo @ All
Offensichtlich habe ich MVVM noch nicht wirklich verstanden und brauche nochmal eure Hilfe dazu.
in diesem Beitrag ( C-Sharp WPF Binding TextBox.Text und Property MVVM ) wurde es mir zwar schon mal erklärt, doch kaum habe ich die Struktur etwas anders aufgebaut, wird die Textbox nicht mehr aktualisiert. Die LÖsung mit DependencyProperties gefällt mir irgendwie auch nicht so besonders (Sorry Uwe !!)
Was ich tun möchte ist eigentlich sehr einfach: Beim Klick auf den Button öffnet sich ein FolderBrowserDialog. Der gewählte Pfad soll in der Textbox angezeigt werden.
Hier der Aufbau:
XAML
Code Behind
Vorher waren alle Properties in der partial Class MainWindow definiert und das hat auch gut funktioniert. Das wurde aber schnell unübersichtlich. Außerdem wollte ich die einzelnen Properties kapseln.
Ich bin mir fast sicher dass das Problem in Zeile 46 liegt (SourcePath prereq = new Sourcepath();), nur wie umgehe ich das?
Danke für die Hilfe!
ein Noob
Offensichtlich habe ich MVVM noch nicht wirklich verstanden und brauche nochmal eure Hilfe dazu.
in diesem Beitrag ( C-Sharp WPF Binding TextBox.Text und Property MVVM ) wurde es mir zwar schon mal erklärt, doch kaum habe ich die Struktur etwas anders aufgebaut, wird die Textbox nicht mehr aktualisiert. Die LÖsung mit DependencyProperties gefällt mir irgendwie auch nicht so besonders (Sorry Uwe !!)
Was ich tun möchte ist eigentlich sehr einfach: Beim Klick auf den Button öffnet sich ein FolderBrowserDialog. Der gewählte Pfad soll in der Textbox angezeigt werden.
Hier der Aufbau:
XAML
<TextBox x:Name="textBox1"
Text="{Binding Path= SourcePath.FolderPath, Mode= TwoWay, UpdateSourceTrigger= PropertyChanged}"/>
<Button x:Name="button1"
Width="32"
Height="23"
Margin="623,117,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Click="button_PrerequisitesPath_Click"
Content=". . ." />
Code Behind
NameSpace MyNameSpace
{
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName, bool force)
{
if (force)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
else
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class SourcePath : ViewModelBase
{
private static string _FolderPath;
public string FolderPath
{
get { return _FolderPath; }
set
{
if (_FolderPath == value)
return;
_FolderPath = value;
NotifyPropertyChanged("Prerequisites_FolderPath", false);
}
}
}
}
public partial class MainWindow : Window
{
private void button1_Click(object sender, RoutedEventArgs e)
{
BrowseFolder();
}
private void BrowseFolder()
{
string toReturn = string.Empty;
using (System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog())
{
SourcePath prereq = new SourcePath();
dialog.ShowNewFolderButton = false;
if (!string.IsNullOrEmpty(prereq.FolderPath))
dialog.SelectedPath = prereq.FolderPath;
else
dialog.RootFolder = Environment.SpecialFolder.MyComputer;
try
{
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
prereq.FolderPath = dialog.SelectedPath;
}
}
catch (Exception) { }
}
}
}
Vorher waren alle Properties in der partial Class MainWindow definiert und das hat auch gut funktioniert. Das wurde aber schnell unübersichtlich. Außerdem wollte ich die einzelnen Properties kapseln.
Ich bin mir fast sicher dass das Problem in Zeile 46 liegt (SourcePath prereq = new Sourcepath();), nur wie umgehe ich das?
Danke für die Hilfe!
ein Noob
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 318980
Url: https://administrator.de/forum/c-sharp-wpf-binding-textbox-text-und-property-mvvm-die-2-318980.html
Ausgedruckt am: 02.04.2025 um 05:04 Uhr
4 Kommentare
Neuester Kommentar

Ich bin mir fast sicher dass das Problem in Zeile 46 liegt (SourcePath prereq = new Sourcepath();), nur wie umgehe ich das?
Eigentlich logisch weil das Objekt nur während der Prozedur BrowseFolder() exisitiert und dann sofort wieder zerstört wird. Die Textbox aber an dieses Objekt gebunden ist. Also ist die Box hinterher leer weil Objekt nicht mehr existiert. Definiere sie als globale Variable im Window oder dort wo sie so lange verfügbar/erreichbar ist solange die Textbox benötigt wird.Gruß

Auch da existiert ein Object nur so lange bis man eine Methode verlässt.
Nein. Da sie global im Window definiert ist existiert das Object natürlich so lange wie das Fenster im Speicher existiert.