不幸的是
MethodParameters
ObjectDataProvider
不能直接绑定。
TwoWay
或
OneWayToSource
Directory.GetFiles
GetListByCategory
<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
ObjectDataProvider.MethodParameters[0]
使用OneWayToSource,这样当我们更改选项卡时,方法参数会更改为新目录。