2009-03-19 3 views
0

XAML에 바인딩 된 개체의 인스턴스가 있습니다. 그것은 나에게 다른 객체의 목록을 반환하는 메소드를 가지고 있습니다 (이 메소드를 전달한 속성 값을 기반으로 해당 속성 값을 가진 모든 객체를 반환합니다).TabItem의 이름 매개 변수로 XAML에서 바운드 메서드를 호출하려면 어떻게해야합니까?

<ObjectDataProvider ObjectInstance="_this.DataContext" MethodName="GetListByCategory" x:Key="List"> 
     <ObjectDataProvider.MethodParameters> 
      <System:String>Windows</System:String> 
     </ObjectDataProvider.MethodParameters> 
    </ObjectDataProvider> 

나는 (결국) 일부 복잡한 DataTemplate을 가진 탭에이 목록을 표시합니다. 그러나 나 자신보다 앞서 나가는 것은 아닙니다.

특정 TabItem (TabItem의 이름이나 헤더와 일치하는 카테고리가있는 것)에 표시되어야하는 모든 객체를 가져 오려고합니다. 이는 메소드에서 수행됩니다. 내 바인딩 된 메서드를 관련 TabItem의 머리글 또는 이름에 전달하는 방법은 무엇입니까?

TabItem의 DataTemplate에 표시하려면이 바인딩 된 메서드의 반환 값에 바인딩해야합니다. 문제의 대답과 필연적으로 관련이 있는지는 모르겠지만이를 정의하는 것이 확실한지 확인하고 싶습니다.

답변

2

ObjectDataProviderMethodParameters은 불행히도 직접 바인딩 할 수 없습니다.

TwoWay 또는 OneWayToSource 바인딩을 사용하여이 문제를 해결할 수 있습니다.

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:sys="clr-namespace:System;assembly=mscorlib" 
     xmlns:io="clr-namespace:System.IO;assembly=mscorlib" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid.Resources> 
     <x:Array x:Key="directories" Type="{x:Type sys:String}"> 
      <sys:String>C:\</sys:String> 
      <sys:String>C:\Windows\</sys:String> 
      <sys:String>C:\Windows\System32\</sys:String> 
     </x:Array> 
     <ObjectDataProvider x:Key="fileList" ObjectType="{x:Type io:Directory}" MethodName="GetFiles"> 
      <ObjectDataProvider.MethodParameters> 
       <!-- Initial value, this will get wiped out by the Binding below. --> 
       <sys:String>C:\</sys:String> 
      </ObjectDataProvider.MethodParameters> 
     </ObjectDataProvider> 
    </Grid.Resources> 
    <TabControl ItemsSource="{StaticResource directories}"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="{x:Type TabItem}"> 
       <Setter Property="ContentTemplate"> 
        <Setter.Value> 
         <DataTemplate DataType="{x:Type sys:String}"> 
          <ListBox ItemsSource="{Binding Source={StaticResource fileList}}"/> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </TabControl.ItemContainerStyle> 
     <TabControl.SelectedItem> 
      <Binding Source="{StaticResource fileList}"  
        Path="MethodParameters[0]" 
        BindsDirectlyToSource="True" 
        Mode="OneWayToSource"/> 
     </TabControl.SelectedItem> 
    </TabControl> 
</Grid> 

TabControl.SelectedItem이 OneWayToSource를 사용하여 ObjectDataProvider.MethodParameters[0]에 바인딩되도록 우리가 탭을 변경할 때, 새로운 디렉토리에 메소드 매개 변수 변경 : 여기 GetListByCategory 방법에 대한 대체 Directory.GetFiles를 사용하는 예입니다.

관련 문제