2010-11-24 3 views
1

내가 같은 여러 UserControl을 있다고 가정사용자 정의 된 usercontrol에 대한 코드 배후에서 xaml 객체에 액세스하는 방법은 무엇입니까?

UC2 뒤에 새로운 UserControl을 코드에서 다음

<my:uc1 x:Name = "myuc1" /> 

같은 XAML에서 UC1을 포함

UC1, UC2을, 내가 UC2의 인스턴스를 만들려고하고 액세스 UC1 같은 :

uc2 mycontrol = new uc2(); 
uc2.myuc1.DataContext = myViewModel; 
.... 

myuc1 뒤에 코드에 액세스 할 수 없습니다 때문에 오류가 발생했습니다,하지만 난 UC2 코드 BEH에 myuc1에 액세스 할 수 있습니다 ind! 이유를 모르겠다.

오류 메시지

는 말했다 : UC2는 'myuc1'

에 대한 정의를 포함하지 않는 방법이 문제를 해결하려면?

답변

0

변수가 아닌 myuc1에 액세스해야합니까? 예를 들어

:

uc2 mycontrol = new uc2(); 
mycontrol.myuc1.DataContext = myViewModel; 
+0

감사합니다. 게시물에 실수를 입력했습니다. mycontrol.myuc1.DataContext = myViewModel이어야합니다. 정의되지 않은 오류가 발생했습니다. – KentZhou

+0

그런 경우 문제를 재현하지 못했습니다. 당신이 철자를 쓰는 방법과 myuc1에 갈 수있는 빠른 앱을 만들었습니다. – Jason

0

그의 원인 UC2는 UC1이 포함되어 있습니다. 그래서, myuc1은 uc2 interanlly에서 접근 가능합니다. 왜냐하면 그것은 private 필드로 컴파일 될 것이기 때문입니다. 이 인스턴스를 public으로 만들고 싶다면 uc2에서 속성을 생성하십시오. 예.

공공 UC1의 MyUC1 {얻을 {반환 myuc1}}

+0

이 경우 일 수 있습니다. 재현하려는 동안 모든 것이 동일한 어셈블리에 있었기 때문에 내부적으로 볼 수있었습니다. – Jason

+0

여기 설명이 잘못되었습니다. myuc1이 __internal__ 접근성이 개인 필드가 아닌 클래스로 클래스에 추가되었습니다. 그러나 공공 접근 시설 속성을 사용하여 액세스해야한다는 데 동의합니다. – AnthonyWJones

0

새 UserControl을 다른 프로젝트이기 때문에 작동하지 않을 코드가 이유를 생각할 수있는 유일한 이유 uc1 및 uc2 컨트롤에서. 명명 된 컨트롤을 나타내는 필드는 내부 액세스 기능이 있으므로 다른 프로젝트에서는 사용할 수 없습니다.

제 생각에는이 필드를 비공개로 설정하는 것은 좋은 선택이 아니며 사실 실제로 동적으로 필드를 만드는 것은 좋지 않습니다. 역사적인 VB6/VBA 양식이 저에게 스맥스.

적절한 속성과 메서드를 uc1에 추가하는 것이 좋습니다. uc1을 사용하여 외부 코드를 직접 작성하는 대신에 uc1을 조작합니다.

어떤 이유로 접근 할 수없는 경우 공용 속성의 컨트롤에 줄 바꿈 액세스를 배치하는 것이 좋습니다. 또한 uc1이 액세스 할 수있는 모든 메서드와 속성을 포함하여 구현할 수있는 인터페이스를 만들면이 공용 속성이 uc1 형식이 아닌 해당 인터페이스를 반환하도록 만들 수 있습니다.

+0

당신이 옳습니다. 감사. 더 간단한 해결책이 있습니다 : FieldModifer를 사용하여이 문제를 해결하십시오. – KentZhou

관련 문제