Как сделать динамическое связывание для элементов, которые используют конвертер? - PullRequest
0 голосов
/ 15 декабря 2011

Я занимаюсь разработкой веб-части Silverlight, используя объектную модель клиента.У меня есть один конвертер в моем проекте следующим образом

public class ForeGroundConverter : IValueConverter
    {
        public ForeGroundConverter()
        {
            }
        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            //return "";
            SolidColorBrush result = new SolidColorBrush(Colors.Black);

            return result;
        }

        // No need to implement converting back on a one-way binding 
        public object ConvertBack(object value, Type targetType,
            object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

    }

Я использую этот конвертер для привязки для следующего элемента

<sdk:DataGridTemplateColumn SortMemberPath="ClientName"  Header="Client Name" IsReadOnly="True" >
                        <sdk:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding ClientName}" Foreground="{Binding Foreground, Converter={StaticResource ForegroundConverter}}"></TextBlock>
                            </DataTemplate>
                        </sdk:DataGridTemplateColumn.CellTemplate>                        
                    </sdk:DataGridTemplateColumn>

У меня есть одно свойство, определенное в классе TimeLog следующим образом

public SolidColorBrush Foreground {get;set;}

У меня нормально работает переплет.Теперь у меня есть событие loadrow для сетки данных следующим образом.

SummaryDataGrid_LoadingRow

private void SummaryDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
        {

if (PaidList.Contains(timeLogObj))
                    {
                        int index = PaidList.IndexOf(timeLogObj);
                        PaidList[index].IsEnabled = false;
                        PaidList[index].CheckBoxVisibility = Visibility.Collapsed;
                        PaidList[index].Foreground = new SolidColorBrush(Color.FromArgb(50, 150, 150, 150));
                    }

}

Пожалуйста, посмотрите следующую строку в коде выше

PaidList[index].Foreground = new SolidColorBrush(Color.FromArgb(50, 150, 150, 150));

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

new SolidColorBrush(Color.FromArgb(50, 150, 150, 150));

Я не знаю, как это сделать.Можете ли вы предоставить мне какой-либо код или ссылку для вышеуказанного вопроса?Если я делаю что-то не так, то, пожалуйста, направь меня.

1 Ответ

0 голосов
/ 15 декабря 2011

Если индекс строки имеет бизнес-значение, я бы просто добавил его в ваш класс TimeLog.

Класс TimeLog должен реализовывать INotifyPropertyChanged, а ваши свойства должны вызывать событие PropertyChangedчтобы ваша привязка работала (по крайней мере, если их значения меняются после первой привязки).

Не могли бы вы объяснить, почему индекс строки влияет на визуализацию ячейки?Это способ выделить данную строку?

...