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!
Schaue mal in den Output bzgl. Bindingfehler.
Und du hast einen Schreibfehler drin: Hight (der sich aber nicht auswirken dürfte).
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?
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.
Ich brauche das zurzeit im CodeBehind, damit ich im Close Event das Schreiben der UserSettings durchführe. Oder stehe ich irgendwie auf dem Schlauch?
Ich prüfe das nachher nochmal, bin aber der Meinung, dass das nicht geht.
Oh man. 😁
Die Variante von Cat funktioniert natürlich. 👍