C# 无法使用控件';s依赖属性

C# 无法使用控件';s依赖属性,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,我的自定义控件名为“FileSelectDialog”,具有依赖项属性: public static readonly DependencyProperty FilePathProperty = DependencyProperty.Register("FilePath", typeof(string), typeof(FileSelectDialog)); public string FilePath { get { return (

我的自定义控件名为“FileSelectDialog”,具有依赖项属性:

    public static readonly DependencyProperty FilePathProperty =
         DependencyProperty.Register("FilePath", typeof(string), typeof(FileSelectDialog));

    public string FilePath
    {
        get { return (string)GetValue(FilePathProperty); }
        set { SetValue(FilePathProperty, value); }
    }
然后我尝试像这样绑定到这个依赖属性:

    <controls:FileSelectDialog FilePath="{Binding FolderName}"/>
所以,据我所知,控件尝试在自身上查找属性的FolderName,而它必须在父控件DataContext中查找它。例如,当我使用简单文本框时:

    <TextBox Text="{Binding Path=FolderName}"/>

一切正常

我的控件中没有显示初始文本

我知道您正在自定义控件中公开此属性,但是您是否正在使用dependency属性中设置的值更新customcontrol中的某些控件

您可能需要附加回调并在customcontrol中的某个控件中显示DP中设置的值

比如:

如果已经这样做了,那么第二个问题是绑定中显示的错误。为此,请尝试将控件的DataContext设置为具有source属性的对象

    <controls:FileSelectDialog x:Name="customControl" FilePath="{Binding FolderName}"/> 
   ... code-behind.
     customControl.DataContext = sourceObject.

... 代码隐藏。
customControl.DataContext=sourceObject。
我的控件中没有显示初始文本

我知道您正在自定义控件中公开此属性,但是您是否正在使用dependency属性中设置的值更新customcontrol中的某些控件

您可能需要附加回调并在customcontrol中的某个控件中显示DP中设置的值

比如:

如果已经这样做了,那么第二个问题是绑定中显示的错误。为此,请尝试将控件的DataContext设置为具有source属性的对象

    <controls:FileSelectDialog x:Name="customControl" FilePath="{Binding FolderName}"/> 
   ... code-behind.
     customControl.DataContext = sourceObject.

... 代码隐藏。
customControl.DataContext=sourceObject。

对我来说似乎是一个基本的DataContext问题
如何设置FileSelectDialog控件的DataContext?似乎您在代码中将dataContext设置为'Me'/'this'或在xaml中设置为'RelativeSource Self'或类似的内容。

对我来说似乎是一个基本的dataContext问题
如何设置FileSelectDialog控件的DataContext?似乎您在代码中将dataContext设置为“Me”/“this”,或在xaml中设置为“RelativeSource Self”或类似的内容。

您必须使用属性已更改的回调函数

   public static readonly DependencyProperty FilePathProperty =
      DependencyProperty.Register("FilePath", typeof(string), 
typeof(FileSelectDialog),new UIPropertyMetadata(
                new PropertyChangedCallback(PropertyChanged))); 


private static void PropertyChanged(DependencyObject d,    
     DependencyPropertyChangedEventArgs e)       
    {           
        //Do your Stuff       
    }   

您必须使用属性已更改的回调函数

   public static readonly DependencyProperty FilePathProperty =
      DependencyProperty.Register("FilePath", typeof(string), 
typeof(FileSelectDialog),new UIPropertyMetadata(
                new PropertyChangedCallback(PropertyChanged))); 


private static void PropertyChanged(DependencyObject d,    
     DependencyPropertyChangedEventArgs e)       
    {           
        //Do your Stuff       
    }   

是的,我正在用DP的值更新我的自定义控件,一切正常。我尝试了以下方法:代码隐藏:{InitializeComponent();DataContextChanged+=new DependencyPropertyChangedEventHandler(_DataContextChanged);}void{U DataContextChanged(对象发送方,DependencyPropertyChangedEventArgs e){FolderSelector.DataContext=DataContext;}但这并没有帮助-在更新控件父控件的datacontext之前绑定失败。是的,我正在使用DP中的值更新自定义控件,一切正常。我尝试了以下方法:代码隐藏:{InitializeComponent();DataContextChanged+=new DependencyPropertyChangedEventHandler(_DataContextChanged);}void{U DataContextChanged(对象发送方,DependencyPropertyChangedEventArgs e){FolderSelector.DataContext=DataContext;}但这并没有帮助-在控件父级的datacontext更新之前绑定失败。你是对的!只要我想从控件的xaml访问代码隐藏属性,我就将自定义控件构造函数中的DataContext设置为该值。所以,我必须更改代码,这是使用控件来使用另一个元素DataContext。你是对的!只要我想从控件的xaml访问代码隐藏属性,我就将自定义控件构造函数中的DataContext设置为该值。所以,我必须更改代码,它使用控件来使用另一个元素DataContext。所以,解决方案是:所以,解决方案是: