2016-01-13 30 views
0

我有被綁定在XAML代碼類變量複選框:WPF如何將複選框雙向鏈接到一個類成員,另一個靜態變量

<CheckBox x:Name="cbxUseBubbleNotifications" Margin="20" IsChecked="{Binding Path=pcdLoggerData.UseBubbleNotifications, Mode=TwoWay}" Content="_Use bubble notifications" HorizontalAlignment="Left" VerticalAlignment="Top" Style="{DynamicResource CheckboxSwitchStyle}" /> 

這應該被認爲是兩方式結合,但什麼情況是:

  1. 複選框設置爲選中狀態---->的VAR pcdLoggerData.UseBubbleNotifications是自動確定
  2. 類被序列化(通過dataContract序列,但我認爲不改變一切) 。
  3. 我重新啓動程序等等pcdLoggerData.UseBubbleNotifications被自動設置爲true 4複選框未設置爲TRUE < ----- ERROR

4點是不正確的:因爲雙向我期望自動做到這一點。

我的類是:

[DataContract] 
public class PCDLoggerBinSerializableData 
{ 
    public PCDLoggerBinSerializableData() { } 
    public PCDLoggerBinSerializableData(string _languageInUse, bool _useBubbleNotifications) 
    { 
    LanguageInUse = _languageInUse; 
    UseBubbleNotifications = _useBubbleNotifications; 
    } 
    [DataMember] 
    public string LanguageInUse { get; set; } 
    [DataMember] 
    public bool UseBubbleNotifications { get; set; } 
} 
} 

更重要的是我有根據相同值的pcdLogger.UseBubbleNotifications /變化來設置另一個變量,這是一個靜態無功。 像Bubble.NoBubbles = pcdmisData.UseBubbleNotifications

所以兩個問題:

  1. 數據綁定不是雙向工作(僅單程)
  2. 怎麼也數據綁定另一個靜止無功?

感謝

--ADD--

不工作,我把斷點在類的所有部分,他們從來沒有爲它。

這是我做的:

[DataContract] 
public class PCDLoggerBinSerializableData: INotifyPropertyChanged 
{ 
    #region CONSTRUCTORS 
    public PCDLoggerBinSerializableData() { } 
    public PCDLoggerBinSerializableData(string _languageInUse, bool _useBubbleNotifications) 
    { 
    LanguageInUse = _languageInUse; 
    UseBubbleNotifications = _useBubbleNotifications; 
    } 
    #endregion 

    #region OPTIONS 
    [DataMember] 
    public string LanguageInUse { get; set; } 
    [DataMember] 
    private bool useBubbleNotifications; 
    public bool UseBubbleNotifications 
    { 
    get { return useBubbleNotifications; } 
    set 
    { 
     useBubbleNotifications = value; 
     Bubble.NoBubblesPlease = !useBubbleNotifications; 
     OnPropertyChange("UseBubbleNotifications"); 
    } 
    } 
    #endregion 

    #region NOTIFIER 
    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChange(string inName) 
    { 
    if (PropertyChanged != null) 
     PropertyChanged(this, new PropertyChangedEventArgs("inName")); 
    } 
    #endregion 
    } 
+0

對於你的第一個問題,你有沒有嘗試過使用INotifyPropertyChanged?我想你必須這樣做才能讓視圖知道你已經用代碼更新了它。 對於你的第二個問題,你怎麼能有一個複選框綁定到兩個不同的變量?如果這些變量是不同的呢?複選框應該顯示哪個值?如果這些值總是相同的,那麼你可以在UseBubbleNotifications setter屬性的setter中設置第二個值嗎? – ProgrammingDude

+0

不,我不會請你告訴我如何在答案?至於第二個問題? thanx – Patrick

+0

不知道這是否有幫助,但我得到這個錯誤: – Patrick

回答

1

這將是這樣的:

public bool UseBubbleNotifications 
{ 
get 
{ 
    return useBubbleNotifications; 
} 
set 
{ 
    useBubbleNotifications = value; 
    Other_Static_Variable = value; 
    OnPropertyChange("UseBubbleNotifications"); 
} 
} 

public void OnPropertyChange(string inName) 
{ 
    if(PropertyChanged != null) 
     { 
     PropertyChanged(this, new PropertyChangedEventArgs("inName")); 
     } 
} 

這樣的事情可能工作。當然,你的類將不得不繼承INotifyPropertyChanged接口。

+0

這是行不通的,請參閱我的編輯thanx – Patrick

+0

System.Windows.Data錯誤:17:無法從''獲得'pcdLoggerData'值(鍵入'對象') (輸入'MainViewModel')。 BindingExpression:路徑= pcdLoggerData。UseBubbleNotifications; DataItem ='MainViewModel'(HashCode = 63617293);目標元素是'CheckBox'(Name ='cbxUseBubbleNotifications');目標屬性是'IsChecked'(類型'Nullable'1')InvalidOperationException:'System.InvalidOperationException:無效的路徑propertyPercorso dellaproprietànon valido。 – Patrick

+0

對於'System.Dynamic.DynamicObject + MetaDynamic',沒有公共屬性colled'Items'。在CallSite.Target(封閉,調用點,對象) 在System.Dynamic.UpdateDelegates.UpdateAndExecute1 [T0,TRET](調用點站點,T0爲arg0) 在MS.Internal.DynamicPropertyAccessorImpl.GetValue(對象成分) 在MS 。 Internal.Data.PropertyPathWorker.GetValue(Object item,Int32 level) in MS.Internal.Data.PropertyPathWorker.RawValue(Int32 k)' – Patrick

相關問題