Как я могу вызвать связанный метод в XAML с параметром имени TabItem? - PullRequest
0 голосов
/ 19 марта 2009

У меня есть экземпляр объекта, связанного в XAML. У него есть метод, который возвращает мне список других объектов (в зависимости от значения свойства, которое я передаю этому методу, он возвращает все объекты со значением этого свойства).

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

Я (в конце концов) хочу отобразить этот список на вкладке с каким-то сложным DataTemplate. Но не опередить себя.

Я хочу получить все объекты, которые должны отображаться в определенном TabItem внутри TabControl (те, которые имеют категорию, соответствующую имени или заголовку TabItem - это делается в методе). Как передать моему связанному методу соответствующий заголовок или имя соответствующего TabItem?

Имейте в виду, что мне нужно привязать возвращаемое значение этого связанного метода для отображения в DataTemplate в TabItem. Я не знаю, будет ли это обязательно иметь отношение к ответу на проблему, но я хочу убедиться, что я четко определил ее.

1 Ответ

3 голосов
/ 19 марта 2009

К сожалению, 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, поэтому при изменении вкладок параметр метода изменяется на новый каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...