【发布时间】:2016-02-01 16:05:35
【问题描述】:
我对 WPF 非常陌生,尤其是对 DataBinding,我很难理解如何在没有 XAML 的情况下对其进行编码。如何在没有 XAML 的情况下将父可见性(父是 scrollViewer)绑定到其子可见性(子是网格)?这是我现在正在尝试做的事情:
{
//Code that creates grid
//Code that creates scrollViewer
scrollViewer.Content = grid;
LayoutRoot.Children.Add(scrollViewer); //adding it to the main window
//Creating binding
Binding myBinding = new Binding("Vis");
BooleanToVisibilityConverter c = new BooleanToVisibilityConverter();
myBinding.Source = grid.Visibility;
myBinding.Converter = c;
myBinding.Mode = BindingMode.TwoWay;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(scrollViewer, VisibilityProperty, myBinding);
}
我现在的“Vis”是什么:
public Visibility Vis
{
get
{
return Visibility;
}
set
{
Visibility = value;
OnPropertyChanged(Visibility);
}
}
当然,现在的问题是OnPropertyChanged,它给我一个错误,我需要把DependencyPropertyChangedEventArgs放在里面,但我不知道怎么做。我不确定,我这样做是否正确(也许这可以简化?),或者我的方法可能根本不起作用,即使在修复了这个错误之后。我需要它没有 XAML,因为控件是动态创建的。
【问题讨论】:
-
绑定的
Source是要观察的对象,路径指定将使用它的哪些属性。new Binding("Visibility") { Source = grid }应该可以解决问题(假设grid是Grid)。 -
“如何在没有 XAML 的情况下将父可见性(父级为 scrollViewer)绑定到其子级可见性(子级为网格)?” 您不需要。如果父项不可见,则子项无法可见。您想在这里实现什么目标?
-
@PieterWitvoet 感谢您的回答。尝试用
myBinding.Source = new Binding("Visibility") { Source = grid }替换myBinding.Source = grid.Visibility;,没有成功。 @ChrisF我通常在代码中与网格进行交互,因为我正在向其中添加子项。因此,每次我想让 scrollViewer 不可见时都需要添加一些行(而且我每次都需要做类似ScrollViewer scrollViewer = (ScrollViewer)LayoutRoot.FindName("scrollViewername")的事情。 -
@HeideKnight:我展示的绑定应该替换
myBinding,而不是用作其来源。 -
@PieterWitvoet 现在所有
scrollViewers总是不可见的,如果我将grid可见性设置为可见。另外,我已经删除了myBinding.Source = grid.Visibility;行。