2016-02-01 68 views
1

我对WPF很陌生,特别是DataBinding,而且我很难理解,如何在不使用XAML的情况下对其进行编码。如何在不使用XAML的情况下将父级可见性(父级是scrollViewer)绑定到子级可见性(子级为网格)?这里是我想现在做的事:没有XAML的绑定可见性

{ 
//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); 
} 

这里什么是我的“可见”现在:

public Visibility Vis 
{ 
    get 
    { 
     return Visibility; 
    } 
    set 
    { 
     Visibility = value; 
     OnPropertyChanged(Visibility); 
    } 
} 

Ofcourse,现在的问题是OnPropertyChanged,它给了我一个错误,我需要把DependencyPropertyChangedEventArgs放在里面,但我不知道如何去做。我不确定,我是否正确地做了这些工作(也许这可以简化?),或者甚至在修复此错误之后,我的方法根本无法工作。我需要它没有XAML,因为控件是动态创建的。

+1

绑定的'Source'是要观察的对象,路径指定将使用哪个属性。 '新的绑定(“可视性”){源=网格}'应该做的伎俩(假设'网格'是'网格')。 –

+2

*“如果没有XAML,我怎样才能将父母的可见性(父母是scrollViewer)绑定到孩子的可见性(孩子是网格)?”*你不需要。如果父母不可见,则**不能被看到。你想在这里做什么? – ChrisF

+0

@PieterWitvoet谢谢你的回答。试图用'myBinding.Source = new Binding(“Visibility”){Source = grid}'替换'myBinding.Source = grid.Visibility;',没有成功。 @ChrisF我通常在代码中与网格进行交互,因为我正在向它添加子对象。因此,每次我想让scrollViewer不可见时(每次我需要像ScrollViewer scrollViewer =(ScrollViewer)LayoutRoot.FindName(“scrollViewername”)一样)添加一些行。 – HeideKnight

回答

0

PieterWitvoet提供的解决方案为我工作。我不得不在Visibility.Visible上设置scrollViewer的可见性,但其他一切正常。