Laden...

WPF Binding von Height

Erstellt von weismat vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.985 Views
W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 8 Jahren
WPF Binding von Height

Ich möchte für meine App mit einer Custom User Settings arbeiten und dort die Einstellungen der Windowsgrößen und -positionen speichern.
Dafür habe ich folgende UserSettings Klasse erstellt:


using System.Configuration;

namespace WindowsSettingsTest
{
    public class UserSettingsT : ApplicationSettingsBase
    {
        [UserScopedSetting()]
        [DefaultSettingValue("350")]
        public int Height
        {
            get
            {
                return (int)this["Hight"];
            }
            set
            {
                this["Hight"] = value;
            }
        }
    }
}

Der TestWindow CodeBehind sieht wie folgt aus:


using System;
using System.Windows;

namespace WindowsSettingsTest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public UserSettingsT UserSettings { get; set; }
        public MainWindow()
        {
            UserSettings = new UserSettingsT();            
            InitializeComponent();
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            UserSettings.Save();
        }
    }
}

Das Xaml dazu:


<Window x:Class="WindowsSettingsTest.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:WindowsSettingsTest"
        mc:Ignorable="d"
        Title="MainWindow" Height="{Binding UserSettings.Height, Mode=TwoWay}" Width="525" Closed="Window_Closed">
    <Grid>
    </Grid>
</Window>

Was mache ich falsch? Wahrscheinlich ist der Fehler bei Binding im XAML - sehe gerade nix... Danke!

1.040 Beiträge seit 2007
vor 8 Jahren

Schaue mal in den Output bzgl. Bindingfehler.

Und du hast einen Schreibfehler drin: Hight (der sich aber nicht auswirken dürfte).

W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 8 Jahren

System.Windows.Data Information: 41 : BindingExpression path error: 'UserSettings' property not found for 'object' because data item is null. This could happen because the data provider has not produced any data yet. BindingExpression:Path=UserSettings.Height; DataItem=null; target element is 'MainWindow' (Name=''); target property is 'Height' (type 'Double')

Kannst Du Dein XAML posten?

1.040 Beiträge seit 2007
vor 8 Jahren

Also wenn man die UserSettingsT im ViewModel definiert, dann funktioniert es.
Ist die Property im Code-Behind definiert, funktioniert es nicht.

Du solltest dir also ein ViewModel anlegen und nutzen.

W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 8 Jahren

Ich brauche das zurzeit im CodeBehind, damit ich im Close Event das Schreiben der UserSettings durchführe. Oder stehe ich irgendwie auf dem Schlauch?

1.040 Beiträge seit 2007
vor 8 Jahren

Ich prüfe das nachher nochmal, bin aber der Meinung, dass das nicht geht.

771 Beiträge seit 2009
vor 8 Jahren

Probiere mal im Konstruktor


DataContext = this;

1.040 Beiträge seit 2007
vor 8 Jahren

Oh man. 😁
Die Variante von Cat funktioniert natürlich. 👍

W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 8 Jahren

Danke....Jetzt klappts auch mit mehreren Windows 😉

771 Beiträge seit 2009
vor 8 Jahren

Wenn sich alles so einfach lösen liesse 😁