如何在WPF中将属性从视图模型数据绑定到自定义用户控件?



我创建了一个自定义控件来测试绑定的工作原理。它有一个依赖属性,我想从另一个视图绑定它,并且我还希望在绑定属性使用 INotifyPropertyChanged 引发属性更改时更新它:

public string BindLabelText
{
get { return (string)GetValue(BindLabelTextProperty); }
set { SetValue(BindLabelTextProperty, value); }
}
public static readonly DependencyProperty BindLabelTextProperty =
DependencyProperty.Register("BindLabelText", typeof(string), typeof(BindingControl), 
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

在我的控制中,我像这样绑定依赖属性:

<TextBlock 
Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"
Text="{Binding ElementName=TestControl, Path=BindLabelText,  FallbackValue=BindLabelText}" 
FontSize="20"/>

我像这样使用控制:

<local:BindingControl BindLabelText="Static main window value" />
<local:BindingControl BindLabelText="{Binding HeaderLabel, FallbackValue=HeaderLabel}" />
<Button Content="Change MainWindow property" Command="{Binding ChangeMainTextCommand}"/>

TextBlock 文本值是用静态值设置的,但当我尝试将其绑定到属性时它不起作用。在这两个视图中,我在代码隐藏中将 DataContext 设置为 ViewModel:

this.DataContext = new BindingControlViewModel();

编辑: 将我的代码添加到 github。就像我在评论中所说的那样,我正在尝试将MainWindowViewModel上的属性绑定到我的用户控件DP BindLabelText,这是我的父视图(MainWindow(的数据上下文。除了 DP 之外,用户控件也有自己的视图模型。我的目标是使用户控件在 MainWindowViewModel 的绑定属性更新时更新。

我设法通过将我的控件 DataContext 设置为网格(如MyGrid.DataContext = new BindingControlViewModel();(而不是像this.DataContext = new BindingControlViewModel();一样将其设置在控件本身上来解决它。

相关内容

  • 没有找到相关文章

最新更新