2011-07-28 133 views
1

有工作了一下,由於我現在用的答案在DataContext:綁定的用戶控件

public PopupProgramazione Popup 
    { 
     get { return _Popup; } 
     set 
     { 
      _Popup = value; 
      RaisePropertyChanged("Popup"); 
     } 
    } 

    public void Programmazione(InterventoSchedeConsuntivi intervento) 
    { 
     Popup.Show = true; 
     InterventoPopupProgramazione = intervento; 
    } 

奇怪的問題自帶的XAML:

public class PopupProgramazione : DependencyObject 
    { 
     public static readonly DependencyProperty ShowProperty = DependencyProperty.Register("FirstNo", typeof(bool), typeof(PopupProgramazione), null); 

     public bool Show 
     { 
      get { return (bool)GetValue(ShowProperty); } 
      set { SetValue(ShowProperty, value); } 
     } 
    } 
在我的視圖模型

<local:PopupProgrammazione 
      x:Name="popupProg" 
      Height="300" 
      Width="400" 
      Canvas.ZIndex="2" 
      Canvas.Left="150" 
      Canvas.Top="150" Grid.RowSpan="4" Grid.Column="2" Margin="7,4,12,296" 
      Visibility="{Binding Path=Popup.Show, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}}" 
      DataContext="{Binding Path=InterventoPopupProgramazione}" 
      > 
     </local:PopupProgrammazione> 

如果我只有可見性設置它運作良好,我可以看到我通過轉換器使用debu G。

如果兩者都有,則不彈出彈出窗口的初始化(彈出窗口顯示,而Popup.Show = false)。但是如果我關閉彈出:

private void Close_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      this.Visibility = Visibility.Collapsed; 
     } 

,然後路過我的函數打開它,它的工作原理,但沒有通過轉換器傳遞。

有人能解釋我發生了什麼嗎?

[編輯] 而不是具體綁定我的usercontrol到一個專用的對象,我使用主xaml的datacontext,然後它完美的工作。 [/編輯]

回答

0

您需要使用扶養屬性

http://msdn.microsoft.com/en-us/library/ms752914.aspx

一個體面的教程 http://www.switchonthecode.com/tutorials/wpf-tutorial-introduction-to-dependency-properties

基本上你需要設置靜態方法......這將註冊屬性並讓你在XAML中綁定它。然後重新指定您的財產以獲取並設置用於代碼的依賴屬性。

它看起來很多困難比它;)

編輯:

哦...對不起,也許我誤解了..你不能只綁定到是就像你的視圖模型的價值爲showPopup?未能通過屬性註冊更改事件?

+0

thx爲你提供幫助約翰,我從Silverlight開始,現在我在綁定中有點失落... – Arthis

+0

除了我用你告訴我的內容重寫了所有內容之外,我已經重寫了整個問題。同樣的問題,但代碼已經演變...千謝謝你! – Arthis