Как позвонить в PropertyChanged на ярлык для другой собственности - PullRequest
0 голосов
/ 09 января 2019

Здравствуйте. Мне было любопытно, можно ли было установить PropertyChanged для другого свойства? Моя метка привязана к Bandmember, а текст привязан к свойству FormattedName.

Поскольку это происходит прямо сейчас, это событие PropertyChanged будет запущено только при изменении свойства FormattedName. У меня есть другое свойство с именем Happiness на Bandmember, которое я хочу, чтобы это вызывало событие PropertyChanged, когда Happiness обновляется, а не FormattedName.

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>

Спасибо!

1 Ответ

0 голосов
/ 09 января 2019

Ах, нашел ваш новый вопрос (я вижу, вы поняли, почему он не работал раньше)

Я предлагаю использовать преобразователь значений .

То, что это будет делать, это преобразовать значение int Счастья в цвет, и затем вы можете связать свойство Label *1007* с 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}}">
...