2009-12-17 139 views
0

我有一個自定義WPF控件綁定一個DependencyProperty MyString的WPF從FindAncestor到依賴項屬性自定義控件的

我使用的是控制一個ItemsControl內對我的觀想從出魚的值ViewModel。

由於控件的DataContext成爲ItemsControl的ItemsSource中的每個Item,我認爲我只能使用FindAncestor,但dosnt似乎可以工作......任何人都可以看到我要出錯的地方嗎?

繼承人的XAML的查看...

<Grid> 
    <ItemsControl ItemsSource="{Binding MyItems}" > 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" Name="myStack"> 
        <ImportExceptions:ControlStrip MyString="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ItemsControl}}, Path=DataContext.MyStringOnViewModel}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 

    </ItemsControl> 
</Grid> 

和繼承人的背後我的自定義控制代碼,我已經建立了我的依賴屬性...

public partial class ControlStrip 
{ 

    public ControlStrip() 
    { 
     InitializeComponent(); 
    } 

    public string MyString 
    { 
     get 
     { 
      return GetValue(MyStringProperty).ToString(); 
     } 
     set 
     { 
      SetValue(MyStringProperty, value); 
     } 
    } 

    public static readonly DependencyProperty MyStringProperty = 
     DependencyProperty.RegisterAttached("MyString", typeof (string), typeof (ControlStrip)); 


} 

回答

1

您的代碼看起來不錯。可能你在DataContext參考中犯了一個錯誤。在所有可能性中,ItemsControl的DataContext已經是MyStringOnViewModel。因此,在Path屬性中的DataContext之後省略.MystringOnViewModel。如果不是,你可以提供更多的代碼,或者發佈一個簡單的代碼來模擬DataCon,文本是如何設置的?

+0

我以爲這是一個領帶? ;) – kiwipom 2009-12-17 18:03:39

+0

正如您懷疑我在DataContext參考中找到了錯誤。謝謝你的幫助 – 2009-12-21 16:12:44

3

的DataContext的控件不會改變 - 對於ImportExceptions:ControlStrip的DataContext將(除非明確指定)下一個DataContext可用,因爲它向上「可視化樹」...

我推斷fr OM你的代碼,你已經設置的DataContext查看到一個視圖模型與性能「MyItems」和「MyStringOnViewModel」 - 你應該能夠簡單地將MyString的屬性直接綁定到視圖模型,就像

<ImportExceptions:ControlStrip MyString="{Binding Path=MyStringOnViewModel}" /> 
+0

我怕你打我;-) – Dabblernl 2009-12-17 18:01:09

相關問題