2
我創建了一個自定義控件,其中包含用於數據綁定的依賴項屬性。 然後應將綁定的值顯示在文本框中。 此綁定正常工作。WPF:無法綁定到自定義控件的依賴項屬性
當我實現我的自定義控件時,會發生此問題。網格的數據上下文是一個簡單的視圖模型,它包含一個用於綁定的String屬性。
- 如果我將此屬性綁定到標準wpf控件文本框一切正常。
- 如果我將屬性綁定到我的自定義控件,則不會發生任何事情。
一些調試後我發現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}}"/>