Ниже приведен простой пример того, как вы можете использовать DependencyProperty
в UWP.
XAML
<Page x:Name="loginPage"
... >
<TextBlock Text="{Binding welcomeText,ElementName=loginPage}"></TextBlock>
C #
using Windows.UI.Xaml;
...
public string welcomeText
{
get { return (string)GetValue(welcomeTextProperty); }
set { SetValue(welcomeTextProperty, value); }
}
// Using a DependencyProperty as the backing store for welcomeText. This enables animation, styling, binding, etc...
public static readonly DependencyProperty welcomeTextProperty =
DependencyProperty.Register("welcomeText", typeof(string), typeof(LoginPage), null);
В приведенном выше примере мы связываем зависимостьсвойство welcomeText
, которое мы определяем в коде (C #) для TextBlock
.
Обратите внимание, ElementName=loginPage
- это имя страницы, которое мы определяем в XAML.
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ 1:
Из того, что я могу понять из вашего кода, вы пытаетесь получить значение PropertyType
, чтобы преобразовать его в другой тип.
Для этого требования вы можете сделать что-то вроде этого:
В следующем примере у нас есть специальный преобразователь значений, который преобразует длину строки в Visibility
, другими словами, возвращает Visibility
на основе длины строки, которую он получает для преобразования, а также проверяет, относится ли тип value
к типу string
.
XAML
<Page x:Name="loginPage"
xmlns:converters="using:projectName.converters"
... >
<Page.Resources>
<converters:LengthToVisibilityConverter x:Key="lengthToVisibilityKey"></converters:LengthToVisibilityConverter>
</Page.Resources>
...
<TextBlock x:Name="flyoutTxt" Text="{Binding welcomeText,ElementName=loginPage}"></TextBlock>
<TextBlock Text="Has some text" Visibility="{Binding Path=Text,ElementName=flyoutTxt,Converter={StaticResource lengthToVisibilityKey}}"></TextBlock>
Здесь видимость второго TextBlock
основана на длине текста flyoutTxt
.
C #
Пользовательский класс преобразователя для преобразования длиныto Visibility:
class LengthToVisibilityConverter: IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{ //checking if type of "value" is String and its length
if(value != null && value.GetType() == typeof(string) &&
value.ToString().Length > 0)
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Обратите внимание, что в зависимости свойства, определенной выше, не требуется никаких изменений.