C# 无法使用控件';s依赖属性
我的自定义控件名为“FileSelectDialog”,具有依赖项属性: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 (
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。所以,解决方案是:所以,解决方案是: