2014-09-26 4 views
0

부울 isInEditMode이 참일 때만 ListBoxItem을 표시하려고합니다.코드에서 변수 및 변환기에 바인딩

SurfaceListBoxItem slbi = new SurfaceListBoxItem();  

Binding visibilityBinding = new Binding("Visibility"); 
visibilityBinding.Source = isInEditMode; 
visibilityBinding.Converter = new BoolToVisibility(); 
visibilityBinding.NotifyOnTargetUpdated = true; 
slbi.SetBinding(SurfaceListBoxItem.VisibilityProperty, visibilityBinding);      

myListBox.Items.Add(slbi); 

그러나, 컨버터 isInEditMode이 변경 될 때 트리거되지 않았다

private bool isInEditMode 
{ 
    get { return Convert.ToBoolean(GetValue(IsInEditMode_Property)); } 
    set { SetValue(IsInEditMode_Property, value); } 
} 

public static readonly DependencyProperty IsInEditMode_Property = DependencyProperty.Register("isInEditMode", typeof(bool), typeof(MainWindow), new PropertyMetadata(null)); 

이 내가 ListBoxItem를 추가 곳이다 : 이것은 내 변수입니다. 무엇이 잘못 되었습니까?

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
{ 
    if (System.Convert.ToBoolean(value) == true) 
     return System.Windows.Visibility.Visible; 
    else 
     return System.Windows.Visibility.Collapsed; 
} 

나는 빠른 XAML에서 테스트 않았고이 그래도 작동 :

<Grid Visibility="{Binding Path=isInEditMode, ElementName=myMainWindow, Converter={StaticResource BoolToVisibility}, NotifyOnTargetUpdated=True}" /> 
+1

밖으로의 상자있다'BooleanToVisibilityConverter' : http://msdn.microsoft.com/en-us/library/system.windows.controls. booleanantovisibilityconverter % 28v = vs.110 % 29.aspx – Dennis

+0

정보를 제공해 주셔서 감사합니다! 나는 그것을 바꿨지만 여전히 작동하지 않는다. 나는 'visibilityBinding.Source = isInEditMode;'에 뭔가 문제가 있다고 생각한다. 바인딩이 아니다. –

답변

1

Binding 귀하의 건설이 잘못이 꽤 똑바로 앞으로 BTW 내 컨버터입니다. Source이 바인딩 작업의 데이터 소스 인 객체입니다. Path (ctor 매개 변수를 통해 설정)은 데이터 소스의 데이터 속성에 대한 경로입니다. 따라서

, Binding은 다음과 같아야합니다

var visibilityBinding = new Binding("isInEditMode"); 
visibilityBinding.Source = this; 
visibilityBinding.Converter = new BoolToVisibility(); 
visibilityBinding.NotifyOnTargetUpdated = true; 

// here you setting the target property - VisibilityProperty 
slbi.SetBinding(SurfaceListBoxItem.VisibilityProperty, visibilityBinding);