2012-04-09 64 views
1

我有用於處理人物的Wpf-App。 Person Struct是Sql-server表,我使用Linq-to-Sql作爲我的項目(因此dbml中的類指的是人)。基於信息類的WPF窗口標題綁定?

我有表單更新或插入人(簡單的模態窗口)。在這個窗口中,我有Peoperty其中有當前人的價值。

public Person CurrentPerson { get; set; } 

所以我尋找的是:

如何綁定在CurrentPerson.FullName這個窗口基地稱號?並且如果CurrentPerson.FullName已更改,絕對Window標題必須更改!

編輯:更多信息
我想在CurrentPerson.Name改變窗口標題基地未設置爲CurrentPerson.Name同樣相同。所以這可能會改變一些事情。另外我搜索之前找到this和這個Question關於改變標題的一部分。但我需要改變標題基於價值的一部分。

回答

1

首先,你的codebehind或viewmodel應該實現INotifyPropertyChanged。在此之後,執行財產WindowTitle這樣的:

public string WindowTitle 
{ 
    get { return "Some custom prefix" + CurrentPerson.FullName; } 
} 

在此之後,每當你的變化FullNameCurrentPerson,只是拋出一個PropertyChanged事件,例如:

Person _currentPerson; 
public Person CurrentPerson 
{ 
    get { return _currentPerson; } 
    set 
    { 
     _currentPerson = value; 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs("WindowTitle")); 
    } 
} 

編輯:請發表您的綁定的xaml代碼,看着你對新手帖子的評論,似乎是罪魁禍首。另外,請檢查您是否將WindowDataContext設置爲自己。

+0

謝謝我沒有爲當前窗口設置'DataContext'。設置後它運行良好。 – Rev 2012-04-10 11:09:22

1

你可以這樣說:

Person _currentPerson; 
public Person CurrentPerson 
{ 
    get { return _currentPerson; } 
    set 
    { 
     _currentPerson = value; 
     this.Title = value.FullName; 
    } 
} 
+0

謝謝你好。但我想綁定! – Rev 2012-04-09 06:27:13

+1

@Rev我想看看有人能做到這一點,或解釋爲什麼這是不可能的。看來正常的綁定方法在這種情況下不起作用,但我不知道爲什麼。 – McGarnagle 2012-04-09 06:50:15

+0

是的,我嘗試甚至依賴道具或轉換器,但我不能這樣做。我不知道該怎麼做,也許有人可以幫助我! – Rev 2012-04-09 07:23:06

2

編輯:刪除舊的答案,因爲我完全誤解了這個問題。

問題可能在於你的約束力。我認爲綁定失敗,因爲它不能決定在哪裏搜索CurrentUser(binding source)。你可以試試這個 -

編輯2:可以命名你的控制,然後使用該名稱在綁定元素,如:

<Window x:Class="TestApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="{Binding ElementName=MW,Path=CurrentUser.FullName, StringFormat='Welcome \{0\}!'}"   
    Name="MW"> 

如果這不起作用,你可以啓用調試WPF綁定表達式轉到:

Tools -> Options -> Debugging -> Output Window -> WPF Trace Settings [this for for VS2010;應該與其他人類似。]

並檢查是否存在綁定錯誤,如果是這樣。

+0

@Rev:哦,我錯過了Linq-to-Sql位。這將解釋反對票(這很好)。我希望我現在能理解這個問題。 – NoviceProgrammer 2012-04-09 13:30:01

+0

@Rev:不知道您是否使用標題欄或常規標準窗口的自定義控件。 – NoviceProgrammer 2012-04-10 08:18:23

+0

+1爲wpf調試,也是你的注意力 – Rev 2012-04-10 10:18:14