我真的是WPF的新手。我试图在代码中设置控件属性的默认值,并且想在datacontext(VM)可用时通过数据绑定覆盖属性。但是数据绑定在这种情况下不起作用。
例子:
后面的代码:
public partial class MyViewControl : UserControl { public MyViewControl() { InitializeComponent(); // it works if I remove this line panelControl.Visibility = Visibility.Hidden; } }
xaml用户控件:
<DockPanel Name="panelControl" Visibility="{Binding
MyViewModelProperty_IsVisible_ConvertedToVisibility}">
xaml主窗口:
<my:MyViewControl DataContext="{Binding ElementName=lbListBox,
Path=SelectedItem}"/>
实际上,FallbackValue参数适用于这种情况,但是我想知道技术原因,为什么控制属性由代码设置后无法绑定?
Xaml在期间进行处理InitializeComponent()
,因此发生了以下情况:
InitializeComponent(); // binding is set
panelControl.Visibility = Visibility.Hidden; // binding is removed (value is set)
您可以恢复绑定
InitializeComponent();
panelControl.Visibility = Visibility.Hidden;
BindingOperations.SetBinding(panelControl, Control.VisibilityProperty,
new Binding()
{
Path = new PropertyPath(nameof(ViewModel.MyViewModelProperty_IsVisible_ConvertedToVisibility)),
Source = viewModelInstance, // this.DataContext ?
});
而且它将在以后工作。但是尚不清楚您为什么首先要覆盖绑定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句