1

ビューのクラス名を CommandParameter として渡す必要があります。これを行う方法?

<UserControl x:Name="window"
             x:Class="Test.Views.MyView"
             ...>

    <Grid x:Name="LayoutRoot" Margin="2">
        <Grid.Resources>
            <DataTemplate x:Key="tabItemTemplate">
                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" >
                    <Button Command="{Binding DataContext.CloseCommand, ElementName=window}"
                            CommandParameter="{Binding x:Class, ElementName=window}">
                    </Button>
                </StackPanel>
            </DataTemplate>
        </Grid.Resources>
    </Grid>
</UserControl>

結果は文字列 'Test.Views.MyView' になります。

4

1 に答える 1

1

x:Classは単なるディレクティブであり、プロパティではないため、バインドすることはできません。

MSDN から

XAML マークアップ コンパイルを構成して、マークアップとコード ビハインドの間で部分クラスを結合します。コード部分クラスは共通言語仕様 (CLS) 言語の別のコード ファイルで定義されますが、マークアップ部分クラスは通常、XAML コンパイル中にコード生成によって作成されます。

ただし、Type の FullName プロパティから同じ結果を得ることができます。コンバーターを使用する

CommandParameter="{Binding ElementName=window,
                           Path=.,
                           Converter={StaticResource GetTypeFullNameConverter}}"

GetTypeFullNameConverter

public class GetTypeFullNameConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
        {
            return null;
        }
        return value.GetType().FullName;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
于 2012-05-23T22:42:39.227 に答える