如何在Binding中使用x:class属性?

时间:2012-05-23 22:20:46

标签: c# wpf xaml

我需要将View的类名称作为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'。

1 个答案:

答案 0 :(得分:1)

x:Class只是一个指令而不是属性,所以你将无法绑定它。

From MSDN

  

配置XAML标记编译以加入其间的部分类   标记和代码隐藏。代码部分类在a中定义   使用公共语言规范(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();
    }
}