2013-09-27 177 views
2

我創建了一個自定義控件,其中包含用於數據綁定的依賴項屬性。 然後應將綁定的值顯示在文本框中。 此綁定正常工作。WPF:無法綁定到自定義控件的依賴項屬性

當我實現我的自定義控件時,會發生此問題。網格的數據上下文是一個簡單的視圖模型,它包含一個用於綁定的String屬性。

  1. 如果我將此屬性綁定到標準wpf控件文本框一切正常。
  2. 如果我將屬性綁定到我的自定義控件,則不會發生任何事情。

一些調試後我發現SampleText中搜索CustomControl。當然它並不存在。 爲什麼我的財產搜查CustomControl,當它在方案1

<Window x:Class="SampleApplicatoin.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:controls="clr-namespace:SampleApplication" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.DataContext> 
      <controls:ViewModel/> 
     </Grid.DataContext> 
     <TextBox Text="{Binding SampleText}"/> 
     <controls:CustomControl TextBoxText="{Binding SampleText}"/> 
    </Grid> 
</Window> 

發生下面的自定義控件的XAML代碼沒有從的DataContext拍攝。 我用的DataContext =自從後面的代碼獲得依賴屬性:

<UserControl x:Class="SampleApplication.CustomControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <Grid> 
     <TextBox HorizontalAlignment="Left" Height="23" Margin="87,133,0,0" TextWrapping="Wrap" Text="{Binding TextBoxText}" VerticalAlignment="Top" Width="120"/> 
    </Grid> 
</UserControl> 

的xaml.cs文件只包含依賴屬性:

public partial class CustomControl : UserControl 
    { 
     public static readonly DependencyProperty TextBoxTextProperty = DependencyProperty.Register("TextBoxText", typeof (String), typeof (CustomControl), new PropertyMetadata(default(String))); 

     public CustomControl() 
     { 
      InitializeComponent(); 
     } 

     public String TextBoxText 
     { 
      get { return (String) GetValue(TextBoxTextProperty); } 
      set { SetValue(TextBoxTextProperty, value); } 
     } 
    } 

感謝有這方面的幫助。現在真的讓我發瘋。

編輯:

我只是過來兩個可能的解決方案:

這裏第一(這爲我的作品):

<!-- Give that child a name ... --> 
<controls:ViewModel x:Name="viewModel"/> 
<!-- ... and set it as ElementName --> 
<controls:CustomControl TextBoxText="{Binding SampleText, ElementName=viewModel}"/> 

第二個。這在我的情況下不起作用。我不知道爲什麼:

<controls:CustomControl TextBoxText="{Binding SampleText, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type controls:ViewModel}}}"/> 
<!-- or --> 
<controls:CustomControl TextBoxText="{Binding SampleText, RelativeSource={RelativeSource FindAncestor, AncestorType=controls:ViewModel}}"/> 

回答

1

我有類似的情況。 在我的情況下,我通過在ViewModel中的setter屬性中添加OnPropertyChanged來修復它。

相關問題