2015-02-05 1 views
0

나는이 같은 텍스트 XAML 사용하여 DataTemplate을 생성하고 있습니다에 XAML 텍스트와 XamlReader에서 만든 DataTemplate을에서 변환기를 사용하여 WPF : 요소의전화 8

var dataTemplate = (DataTemplate)XamlReader.Load(xaml.ToString()); 

하나는 그것으로 바인딩 체크 박스 컨버터를 가리키는 것입니다 정적 리소스는 :

StringBuilder xaml = new StringBuilder(); 
    xaml.AppendFormat(@"   <CheckBox"); 
    xaml.AppendFormat(@" IsChecked=""{{Binding [{0}], Converter={{StaticResource stringValueToBoolConverter}}, Mode=TwoWay}}""", header.ID); 
    xaml.AppendFormat(@" />"); 

텍스트 변환이 문헌의 존재는 전화의 Application_UnhandledException에 잡힌 예외를 야기한다.

-  InnerException {System.Exception: Error HRESULT E_FAIL has been returned from a call to a COM component. 
    at MS.Internal.XcpImports.CheckHResult(UInt32 hr) 
    at MS.Internal.XcpImports.UIElement_Measure_WithDesiredSize(UIElement element, Size availableSize) 
    at System.Windows.UIElement.Measure_WithDesiredSize(Size availableSize) 
    at System.Windows.Controls.VirtualizingStackPanel.MeasureChild(UIElement child, Size layoutSlotSize) 
    at System.Windows.Controls.VirtualizingStackPanel.MeasureOverride(Size constraint) 
    at System.Windows.FrameworkElement.MeasureOverride(IntPtr nativeTarget, Double inWidth, Double inHeight, Double& outWidth, Double& outHeight)} System.Exception 

템플릿은 목록 상자에서 행을 생성하는 데 사용되며 제어가 자원에 선언 컨버터가 있습니다 : 메시지는 다음과 같습니다

<UserControl.Resources> 
     <converters:StringValueToBoolConverter x:Key="stringValueToBoolConverter" /> 
</UserControl.Resources> 

내가 가정을 일부 생성 단계에서, xaml-> objects의 객체 생성 프로세스는 변환기를 찾을 수 없습니다. - 주위를 둘러 볼 방법이 있습니까?

** 추가

나는 또한 단지 확인란에 대한로드를 추가 시험

- 같은 어설 컨버터를 추가로

StringBuilder xaml = new StringBuilder(); 
xaml.AppendFormat(@"   <CheckBox"); 
xaml.AppendFormat(@" IsChecked=""{{Binding [{0}], Mode=TwoWay}}""", header.ID); 
xaml.AppendFormat(@" Loaded=""FrameworkElement_OnLoaded"""); 

아마 로더이 컨텍스트를 제공 할 수있는 방법이?

답변

0

템플릿은 목록 상자의 행을 생성하는 데 사용되며 제어는 자원에 선언 된 변환이 있습니다

왜 대신 미리로드 된 목록 상자에 데이터를로드에 바인딩 ItemsSource를 사용하지를 파일에서 불러 온 모음? 그리고 가시성 변환기를 사용하여 날짜를 표시하거나 숨 깁니다. 당신이하고있는 일은 그것이 실제로하는 일에 대해 불필요하게 복잡하게 보입니다.

+0

자세히 설명해 주시겠습니까? 나는 각 ListBox 항목이 단일 행의 격자 인 ListBox를 사용하여 DataGrid와 유사한 UI를 만들려고 시도하고 있습니다. 열의 수와 데이터 유형은 컴파일 타임에 알려지지 않습니다. 모든 열은 bool 또는 문자열 유형일 수 있으며 bool (CheckBox)의 경우 데이터 변환을 관리해야합니다. – jchristof

+0

stringbuilder가 xaml을 본질적으로 다시 작성하고이를 제어 도구에 주입하고 있습니다. iumerable에 파싱하고 해당 속성에 액세스하는 데이터 템플릿 구성 요소 내의 ItemsSource = {binding boolIenumerableWhateverThisPropertyIsCalled}도 유효합니다. 데이터 템플릿은 각각의 visiblity 컨테이너를 호출하여 화면에 그릴 수 있습니다. 여기 DataGrids에 대한 추가 정보 [link] http://www.dotnetperls.com/datagrid 및 dataTemplate [link] http://www.codeproject.com/Articles/444371/Creating-WPF-Data-Templates-in-Code - 올바른 방법 – maximdumont

+0

문자열 작성기는 일부 스키마 데이터로 결정되는 체크 박스 또는 텍스트 상자 요소를 생성합니다. 실제 원점 데이터는 모두 문자열이므로 올바른 ui 요소를 만든 다음 변환기가 문자열 데이터가 부울로 평가 될 것으로 예상되는 경우)하지만 이것은 디자인 타임에 알 수 없으며 행에 대해 얻은 데이터는 jchristof