如何为其他 属性 调用 Label 上的 PropertyChanged
How to call PropertyChanged on Label for other property
您好,我很好奇是否可以将 PropertyChanged
设置为不同的 属性?我的标签绑定到 Bandmember
,文本绑定到名为 FormattedName
的 属性。
就目前而言,它只会在 FormattedName
属性 更改时 运行 此 PropertyChanged
事件。我在 Bandmember
上有一个名为 Happiness
的不同 属性,我希望它在更新 Happiness
而非 FormattedName
时调用 PropertyChanged
事件。
XAML:
<ListView x:Name="dayView" ItemsSource="{Binding BandMembers}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Column="0" x:Name="dayViewFormattedNameLabel" FontSize="Small" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"
Text="{Binding FormattedName}" PropertyChanged="DayViewFormattedNameLabel_PropertyChanged" />
<Picker Grid.Column="1" FontSize="Small" Title="{Binding FormattedName, StringFormat='Select Task For {0}'}" x:Name="TaskPickerInListView"
ItemsSource="{Binding AvailableTasks}" SelectedItem="{Binding AssignedTask}" ItemDisplayBinding="{Binding TaskDescription}"
SelectedIndexChanged="TaskPickerUpdated" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
谢谢!
啊,找到你的新问题了(我看你意识到为什么它之前不工作了)
我建议改用 value converter。
这样做是将 Happiness 的 int 值转换为颜色,然后您可以使用 Label
的 TextColor
属性 绑定到 Happiness
一个 IntToColorConverter
,例如:
public class IntToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double percent = (double)((int)value) / 100;
double resultRed = Color.Red.R + percent * (Color.Green.R - Color.Red.R);
double resultGreen = Color.Red.G + percent * (Color.Green.G - Color.Red.G);
double resultBlue = Color.Red.B + percent * (Color.Green.B - Color.Red.B);
return new Color(resultRed, resultGreen, resultBlue);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后在XAML中使用它:
<ContentPage.Resources>
<ResourceDictionary>
<local:IntToColorConverter x:Key="intToColor" />
</ResourceDictionary>
</ContentPage.Resources>
<Label ...
TextColor="{Binding Happiness, Converter={StaticResource intToColor}}">
您好,我很好奇是否可以将 PropertyChanged
设置为不同的 属性?我的标签绑定到 Bandmember
,文本绑定到名为 FormattedName
的 属性。
就目前而言,它只会在 FormattedName
属性 更改时 运行 此 PropertyChanged
事件。我在 Bandmember
上有一个名为 Happiness
的不同 属性,我希望它在更新 Happiness
而非 FormattedName
时调用 PropertyChanged
事件。
XAML:
<ListView x:Name="dayView" ItemsSource="{Binding BandMembers}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Grid.Column="0" x:Name="dayViewFormattedNameLabel" FontSize="Small" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand"
Text="{Binding FormattedName}" PropertyChanged="DayViewFormattedNameLabel_PropertyChanged" />
<Picker Grid.Column="1" FontSize="Small" Title="{Binding FormattedName, StringFormat='Select Task For {0}'}" x:Name="TaskPickerInListView"
ItemsSource="{Binding AvailableTasks}" SelectedItem="{Binding AssignedTask}" ItemDisplayBinding="{Binding TaskDescription}"
SelectedIndexChanged="TaskPickerUpdated" />
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
谢谢!
啊,找到你的新问题了(我看你意识到为什么它之前不工作了)
我建议改用 value converter。
这样做是将 Happiness 的 int 值转换为颜色,然后您可以使用 Label
的 TextColor
属性 绑定到 Happiness
一个 IntToColorConverter
,例如:
public class IntToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
double percent = (double)((int)value) / 100;
double resultRed = Color.Red.R + percent * (Color.Green.R - Color.Red.R);
double resultGreen = Color.Red.G + percent * (Color.Green.G - Color.Red.G);
double resultBlue = Color.Red.B + percent * (Color.Green.B - Color.Red.B);
return new Color(resultRed, resultGreen, resultBlue);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后在XAML中使用它:
<ContentPage.Resources>
<ResourceDictionary>
<local:IntToColorConverter x:Key="intToColor" />
</ResourceDictionary>
</ContentPage.Resources>
<Label ...
TextColor="{Binding Happiness, Converter={StaticResource intToColor}}">