2010-12-14 5 views
2

Silverlight 응용 프로그램을 개발 중이며 ListBoxObeservableCollection<XElement>으로 설정하고 Binding Path=Element[name].Value 구문을 사용하여 데이터 템플릿의 값을 가져올 수 있습니다. 바인딩을 성공적으로 가져올 수 있지만 Element [] 구문이 작동하지 않습니다. 그냥 비어있는 것입니다.데이터 바인딩 ObservableCollection <XElement>을 ListBox에 바인딩 하시겠습니까?

<DataTemplate x:Key="SearchResultsTemplate"> 
    <ListBox ItemsSource="{Binding}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding Path=Element[key].Value}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</DataTemplate> 

을하지만 이상하게도이 같은 어느 정도 결합되어 나에게 모든 것을 알려줍니다 컨텐츠를 렌더링 않지만, 뭔가 요소 동적 특성 사용에서 저를 유지하고있다 : 예를 들어,이 작동하지 않습니다

<DataTemplate x:Key="SearchResultsTemplate"> 
    <ListBox ItemsSource="{Binding}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding Path=FirstNode}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</DataTemplate> 

내가 뭘 잘못하고 있니? 대신

답변

4

Element pseudoproperty는 .NET의 데스크톱 버전에서만 사용할 수 있습니다. Silverlight에서 누락 된 .NET Framework 조각 중 하나 인 형식 설명자 시스템을 사용합니다.

전체 .NET 프레임 워크에서 XElement[TypeDescriptionProvider(typeof(XTypeDescriptionProvider<XElement>))] 특성을가집니다. 즉 Element 및 기타 가상 속성이 데이터 바인딩에 노출되는 방식입니다. 이 특성은 Silverlight 버전 XElement에는 없습니다. Silverlight는 TypeDescriptionProvider 또는 해당 특성 뒤에 연결된 관련 기계를 정의하지 않기 때문에 존재할 수 없습니다.

Silverlight는 XML 콘텐츠에 직접 바인딩하는 방법을 제공하지 않습니다 (It doesn 또한 WPF에서 인기있는 다른 솔루션 인 XPath를 지원하지 않습니다.) 당신은 Binding XML in Silverlight without nominal classes을 볼 수 있습니다. Graham Murray가 바인드 가능 유형을 동적으로 생성하는 방법을 보여주는 기사로 연결됩니다.

그래도 비교적 복잡한 해결책입니다. 원하는 데이터를 포함하는 XML의 래퍼 유형을 작성하고 XML에서 LINQ를 사용하여 XML의 래퍼를 채우는 것입니다.

0

XPath를 사용 :

<TextBlock Text="{Binding XPath=<..YourXPathSyntax..>}" /> 

편집 : 이안 지적

, 당신은 Silverlight을 사용하고 있습니다. 따라서 XPath은 작동하지 않습니다. 대신 IValueConverter을 사용하지 않으시겠습니까?

예 :

using System.Xml.Linq; 
using System.Xml.XPath; 

public class IXPathConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     String xpath = (String)parameter; 
     XElement element = (XElement)value; 

     return element.Document.XPathSelectElement(xpath); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

Silverlight d XPath를 지원하지 않으므로 작동하지 않습니다. –

+0

지옥, 그러면 WPF로 태그가 붙은 이유는 무엇입니까? 가자. 그리고 바로 잡아라. – decyclone

관련 문제