2010-03-25 2 views
0

두 개의 데이터 바인딩 된 텍스트 상자가 있습니다. 하나는 문자열에 바인딩되고 다른 하나는 숫자에 바인딩됩니다. '기본'바인딩은 XAML에서 설정됩니다. 어떤 상황에서는 런타임에 바인딩을 되돌려 야합니다 (문자열은 보통 접두어이지만 때로는 접미어입니다).코드에서 데이터 바인딩 바꾸기

Binding stringBinding = BindingOperations.GetBinding(view.seqLeft, TextBox.TextProperty); 
Binding numberBinding = BindingOperations.GetBinding(view.seqRight, TextBox.TextProperty); 
view.seqLeft.SetBinding(TextBlock.TextProperty, numberBinding); 
view.seqRight.SetBinding(TextBlock.TextProperty, stringBinding); 

코드는 바인딩이 참조하는 속성을로드 그 후 : 나는 윈도우가로드 될 때 호출 내보기 모델에 다음 코드를 보유하고 있습니다.

문제는 '새'바인딩이 작동하지 않는 것입니다. 나는 무엇을 놓쳤는가? 더 좋은 방법이 있습니까?

+0

내 코드에 문제가있는 것은 SetBinding 호출의 TextBlock.TextProperty뿐입니다! 그들은 물론, TextBox.TextProperty되어 있어야하지만 너무 오랫동안 내가 나무에 나무를보고 아니었다. –

+0

우리 중 누구도 당신의 질문을 보지 못했습니다. 축하해! –

답변

0

내 코드의 유일한 문제는 텍스트 블록입니다. SetBinding 호출의 텍스트 속성! 그들은 물론, Text Box .TextProperty이었습니다. 그러나 나무를 볼 때 나무가 보이지 않을 정도로 오랫동안 엉망이었습니다.

2

View를 바인딩 할 수있는 접두사 및 접미어 문자열을 노출 한 다음 ViewModel 내의 논리를 사용하거나 사용중인 모든 배킹 개체를 사용하여 해당 문자열을 적절하게 채울 수 있습니다. 이 옵션은 시각적으로 비즈니스 관심사를 깔끔하게 구분하고 자신이 보게되는 것을 간소화합니다.

+0

뷰 모델은 string 및 int 속성을 노출하며 컨트롤은이 속성에 바인딩됩니다. 때로는 다른 방향으로 움직여야 할 필요가 있습니다. 뷰는 아무것도 할 필요가 없습니다 (InitializeComponent 만 있고 다른 코드는 없습니다). SetBinding과 ClearBinding 중 아무 것도 효과가 없다는 것을 발견했습니다. 원래 바인딩을 무엇이든 그대로 유지합니다. 관련성이 높은 경우 VS2010RC 및 Framework 4를 사용하고 있습니다. –

+0

필, 바인딩을 전환하는 것은 유효한 접근 방법 일 수 있습니다. 그러나 바인딩 대신 데이터를 변경하는 것이보다 훌륭한 해결책이라고 생각합니다. 숫자와 문자열을 노출하는 대신 접두어와 접미어를 노출한다는 철학을 사용합니다. 자기 자신에게. 바인딩 스왑 문제를 디버그하려면 SetBinding의 반환 값을 검사하여 오류가 있었는지 확인하고 상태가 활성인지 확인하십시오. –

0

왜 바인딩과 함께 주변에 원숭이? 서로 다른 두 가지 중 하나에 바인딩 된 TextBox를 가지려면 두 개의 TextBox를 만들고 같은 위치에 배치하고 스왑 조건이 무엇이든 관계없이 표시 여부를 전환하십시오.

+0

해결했습니다. 스와핑 바인딩이 완벽하게 작동합니다. Windows Forms 및 일반 Windows 코드에서 가시성 토글 링을 사용 했었지만 양식 /보기 디자인이 너무 지저분해서 마음에 들지 않았습니다. 바인딩이 작동하면 완전히 바뀌 었습니다. –