Moin,
ich habe mich vor einiger Zeit mal an WPF herangewagt und bin dann zwangsläufig auch auf das Databidning gestoßen, was soweit auch recht gut funktioniert.
Nun habe ich allerdings das Problem, dass ich gerne einige Steuerelemente an eine Singelton Klasse binden möchte, die die Aktuellen Einstellungen repräsentiert.
Die Namespace Imports:
<Window x:Class="CSCore_Test.frmOption"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="CSCore_Test"
Title="Optionen" Height="300" Width="300" Loaded="Window_Loaded">
Und das Steuerlement:
<CheckBox Grid.Row="1" Name="cbRandom" Content="Zufällige Wiedergabe" Checked="{Binding RandomPlayback, Source={x:Static local:Settings.Instance}}" />
Der Fehler, der geworfen wird ist:> Fehlermeldung:
Der Name "Settings" ist im Namespace "CSCore_Test" nicht vorhanden.
Der Vollständigkeit halber hier einmal die Klasse "Settings" 😉
namespace CSCore_Test
{
public class Settings : INotifyPropertyChanged
{
//Singelton
private static Settings _instance;
public static Settings Instance
{
get
{
if (_instance == null)
_instance = new Settings();
return _instance;
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string name)
{
var myevent = PropertyChanged;
if (myevent != null)
myevent(null, new PropertyChangedEventArgs(name));
}
private bool _random = false;
public bool RandomPlayback
{
get
{
checkfirstAccess();
return _random;
}
set
{
_random = value;
OnPropertyChanged("RandomPlayback");
}
}
}
}
So, ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt und auch nichts Wichtiges vergessen oder hab ein Thema aufgegriffen, dass hier schon 1000 diskutiert wurde😉
In diesem Sinne schönes Wochenende
Gruß Christian
Hallo Zakant,
welche .NET-Version verwendest du? Erst ab 4.5 ist das Binden an statische Eigenschaften möglich: What's New in WPF Version 4.5 - Binding to static properties.
Moin, ahh, gut zu wissen, aber das Projekt hat als Ziel Framework 4.5 eingestellt, also sollte da nicht das Problem liegen, soweit ich das verstehe, oder?
Hi Zakant,
hast du es mal so probiert:
xmlns:local="clr-namespace:CSCore_Test"
Christian
Weeks of programming can save you hours of planning
Danke, für den Tipp, das hatte ich allerdings schonmal probiert und es ändert leider an dem Problem nix, bis auf die Tatsache, dass die Fehler meldung zu:> Fehlermeldung:
Der Name "Settings" ist im Namespace "clr-namespace:CSCore_Test" nicht vorhanden. wird...
Gruß Christian
Hi,
woran es genau liegt kann ich zwar auch nicht sagen ohne es auszuprobieren -
allerdings vermisse ich vom Design her den private Constructor und ein Lock.
public class Settings : INotifyPropertyChanged
{
private static Settings _instance;
//Singelton
private Settings(){ }
public static Settings Instance
{
get
{
lock(_instance){
if (_instance == null)
_instance = new Settings();
return _instance;
}
}
}
++++ Tag ein, Tag aus: HTML-Programmierer beklagt monotone Arbeit ++++
++++ Ein Witz auf seine Kosten: Masochist kann nur gequält lächeln ++++
++++ Nichts dran: Model leugnet Magersucht ++++
Hallo Zakant,
mach mal bitte folgende Änderung:
<CheckBox Grid.Row="1" Name="cbRandom" Content="Zufällige Wiedergabe" IsChecked="{Binding RandomPlayback, Source={x:Static local:Settings.Instance}}" />
dann sollte es gehen; zumindest bei mir ging es dann.
Hallo irgendwas,
lock auf ein Feld das noch null ist beim ersten Zugriff, ist vielleicht keine so tolle Idee ...
private static readonly Settings _instance = new Settings();
Sollte das gewünschte Ergbis bringen und beim getter werden keine ifs oder locks mehr benötigt.
Grüße
Danke für all die Antworten.
Mitlerweile hab ich das ganze auch zum laufen bekommen, allerdings ohne eine AHnung, wieso und warum oder überhaupt... Daher leider auch von mir keine Lösung, die das Problem behoben hat. In einem zweiten Testprojekt funktionierte der Teil auf jeden Fall 😉
Mal so ganz nebenbei: Kennt jemand eine gute Quelle für wpf Binding? Also nicht unbedingt "von-null-auf" tutorials, sondern ehr referenzen?
Gruß Christian
Hallo irgendwas,
lock auf ein Feld das noch null ist beim ersten Zugriff, ist vielleicht keine so tolle Idee ...
private static readonly Settings _instance = new Settings();
Sollte das gewünschte Ergbis bringen und beim getter werden keine ifs oder locks mehr benötigt.
Grüße
Oh Gott, ja, da merkt man meinen im Moment gedrehten Tagesrhythmus ... danke für die Richtigstellung.
++++ Tag ein, Tag aus: HTML-Programmierer beklagt monotone Arbeit ++++
++++ Ein Witz auf seine Kosten: Masochist kann nur gequält lächeln ++++
++++ Nichts dran: Model leugnet Magersucht ++++