2017-01-21 1 views
0

Situation: Ich habe eine MainView.xaml und MainViewModel.cs Die Ansicht ist mit dem Viewmodel mit Calibrn Micro verbunden. Die Bindung funktioniert, aber nicht für den speziellen Fall: Wenn ich meine Eigenschaft des Typs Bool in meinem Konstruktor auf false initialisieren, wird die Bindung in keinem Fall auf True aktualisiert. Wenn ich die Stütze auf wahr initialisiere, gibt es kein Problem, sie später auf falsch oder wahr zu ändern!Bool Variable wird nicht aktualisiert nach Initialisierung auf falsch

Die XAML-Datei:

<Style x:Key="EyeXGazeAwareElement" TargetType="FrameworkElement"> 
     <Setter Property="eyeX:Behavior.GazeAware" Value="{Binding IsGazeActivated}" /> 
     <Setter Property="eyeX:Behavior.GazeAwareDelay" Value="10" /> 

...

<Grid HorizontalAlignment="Center" Style="{StaticResource EyeXGazeAwareElement}" Width="250"></Grid> 

Und im Ansichtsmodell:

public bool IsGazeActivated { get; set; } 

public MainViewModel() 
    { 
     IsGazeActivated = false; 
    } 


    private void GazeActivatedChanged() 
    { 
     //this value gets changed, but not in the xaml file... 
     //but only if the initial value was set to false, otherwise it is working perfect 
     IsGazeActivated = Setting.Instance.IsGazeActivated; 
    } 

Ich habe bereits versucht mode = twoway zu verwenden, geänderter updatesourcetrigger ,. .. aber nichts hat funktioniert!

EDIT: Ich verwende PropertyChanged.Fody zum Weben meiner Eigenschaften. So müssen Sie PropertyChanged nicht manuell aufrufen. Der Wert von eyeX: Behavior.GazeAware kann Ether "True" oder "False" sein und das sollte mit einem Bool zugeordnet werden .. und es ist bereits Mapping, aber nicht, wenn ich die IsGazeActivated auf False im Konstruktor initialisieren.

Antwort

1

WPF weiß nicht, was ein Bool ist. Sie müssen es entweder zu einer Abhängigkeitseigenschaft machen, oder in Ihrem Fall muss Ihre VM INotifyPropertyChanged implementieren und ein Ereignis für "IsGazeActivated" auslösen, wenn sich der Wert ändert. Typischerweise ist das Muster:

public bool IsGazeActivated 
{ 
get { return _bIsGazeActivated; } 
set { if (value != _bIsGazeActivated) RaiseOnPropertyChanged("IsGazeActivated"); } 
} 
+0

Ich habe meine Frage bearbeitet, ich denke jetzt ist klar, was ich meine. –

0

Sie keine Notwendigkeit IsGazeActivated innerhalb Konstruktor initialisiert werden, da der Standardwert Falsch ist.
Xaml aktualisiert die normalen Eigenschaften nicht. Wann immer Sie INotifyPropertyChanged anwendeten, dann nur seine Aktualisierungen.

private bool isGazeActivated; 
public bool IsGazeActivated 
{ 
get{ return isGazeActivated;} 
set 
{ 
    isGazeActivated = value; 
    NotifyPropertyChanged("IsGazeActivated"); or RaiseOnPropertyChanged("IsGazeActivated"); 
} 
} 


nun aktualisiert seine automatisch den UI Wertform.
Dies wird für Ihr Problem hilfreich sein.

Verwandte Themen