2009-03-19 6 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を持つタブに表示したいと考えています。しかし、自分よりも先に進まないように。

TabControl(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を使用する例を示します。

関連する問題