Можно ли привязать текст текстового блока к ассемблеру приложений?


Если у меня есть TextBlock в углу моего UserControl, можно ли привязать свойство Text к номеру версии моей сборки, который находится в AssemblyInfo.cs

WPF:

<TextBlock Text="{Binding AssemblyVersion}"/>

AssemblyInfo.cs

[assembly: AssemblyVersion("1.0.0.0")]
2 2

2 ответа:

Создайте свойство только для чтения с именем AssemblyVersion и свяжите его.

public Version AssemblyVersion
{
    get
    {
        return Assembly.GetEntryAssembly().GetName().Version;
    }
}

Вот чистый подход XAML

<TextBlock xmlns:ref="clr-namespace:System.Reflection;assembly=mscorlib">
    <TextBlock.Text>
        <Binding Path="Version">
            <Binding.Source>
                <ObjectDataProvider MethodName="GetName">
                    <ObjectDataProvider.ObjectInstance>
                        <ObjectDataProvider MethodName="GetExecutingAssembly"
                                            ObjectType="{x:Type ref:Assembly}" />
                    </ObjectDataProvider.ObjectInstance>
                </ObjectDataProvider>
            </Binding.Source>
        </Binding>
    </TextBlock.Text>
</TextBlock>

В этом примере мы используем ObjectDataProvider для получения желаемой (выполняющейся или, можно сказать, текущей) сборки, за которой следует ее версия.

ObjectDataProvider весьма полезен для извлечения результатов из вызовов методов.