2012-01-25 2 views
-1

포럼을 검색하여 종속 속성을 만들고 확인란에 바인딩하는 것이 좋았지 만 어떤 이유로 바인드되지 않습니다.체크 박스 바인딩이 작동하지 않습니다.

<CheckBox IsChecked="{Binding ElementName=MainWindow, Path=isLoop}" Content="" Height="22" HorizontalAlignment="Left" Margin="250,208,0,0" x:Name="checkBox1" VerticalAlignment="Top" Width="22" /> 

C#을

public bool isLoop 
    { 
     get { return (bool)GetValue(isLoopProperty); } 
     set { SetValue(isLoopProperty, value); } 
    } 

    public static readonly DependencyProperty isLoopProperty = 
     DependencyProperty.Register("isLoop", typeof(bool), typeof(MainWindow), new UIPropertyMetadata(true)); 
+0

DataContext 무엇입니까? –

+1

'출력'창이 제공되어 바인딩 오류가 발생합니까? – doblak

+1

정확히 "바인딩하지 않는다"는 것을 의미합니까? – NestorArturo

답변

0

샘플에 몇 가지 중요한 실수를했습니다.

먼저 "isLoop"속성을 지원하는 개체에 바인딩하지 않습니다 ("MainWindow"가 해당 속성을 가진 사용자 지정 컨트롤이 아니면). 해당 CheckBox의 계층 구조에서 DataContext를 지원하는 개체로 설정하거나 해당 속성이있는 요소에 바인딩해야합니다.

둘째, 비즈니스 개체에 종속성 속성을 만드는 경우가 거의 없습니다. 비즈니스 개체의 경우 INotifyPropertyChanged 패턴을 따릅니다. 일반적으로 시각적 UI 요소 (예 : 원본이 아닌 대상)에 데이터를 바인딩 할 수 있도록 사용자 지정 컨트롤과 같은 종속성 속성을 만들어야합니다.

그래서 문제를 해결하려면 INotifyPropertyChanged를 구현하는 객체를 만들고 Setter에서 NotifyPropertyChanged 이벤트를 발생시키는 IsLoop 속성을 만들고이 객체를 CheckBox의 부모 컨테이너에 대한 DataContext로 설정해야합니다. 해당되는 경우 계층 구조).

HTH

0

당신은 윈도우 자체에 결합된다. 그렇게 할 의향이 있습니까? 코드 예제가 코드 내에 있지 않으면 바인딩이 작동하지 않습니다.

0

당신이 ElementName 바인딩을 사용하고 있기 때문에, 난 당신이 UI 요소에 바인딩 추측하고있다. 문제는 기본 UI 요소 중 어느 것도 isLoop이라는 속성이 없으므로 바인딩이 유효하지 않습니다.

시도 할 수있는 몇 가지 사항이 있습니다. 당신의 isLoop 속성 MainWindow를의 DataContext라는 객체의 일부인 경우 isLoopMainWindow을,라는 사용자 정의 클래스의 속성이 실제로 경우 종속성 속성이 암시 같은

이, 당신의 DataContext.isLoop

<CheckBox IsChecked="{Binding ElementName=MainWindow, Path=DataContext.isLoop}" ... /> 

에 바인딩 변경 확인 MainWindow라는 이름의 객체가 실제로 유형 MainWindow

<local:MainWindow x:Name="MainWindow" /> 

의 및 WO 그 중 어느 경우입니다 rk를 사용하여 전체 XAML (특히 MainWindow 부분), 클래스 MainWindow의 코드 및 MainWindow 클래스 개체를 XAML UI와 연결하는 코드를 게시하십시오.

0

확인란을 클릭하면 isLoop이 실행되지 않습니다. 이는 코드에서 depency 속성에 액세스하기위한 것입니다. PropertyCallback 함수를 추가하고이를 메타 데이터에 등록해야합니다.

관련 문제