Как сделать динамическую привязку для элементов, использующих конвертер?

Я разрабатываю веб-часть 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;}

Привязка у меня работает нормально. Теперь у меня есть событие loadingrow для datagrid следующим образом.

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 текстового блока для определенного индекса строки. В этом случае я хочу, чтобы конвертер принимал значение как (возвратите следующее значение для конкретного индекса строки)

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

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


person Shailesh Jaiswal    schedule 15.12.2011    source источник
comment
Я бы посоветовал придерживаться вашего бизнес-объекта и не использовать индекс строки. Можете ли вы сделать одно из свойств вашего объекта ответственным за сохранение этого индекса, а затем привязать его?   -  person    schedule 15.12.2011


Ответы (1)


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

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

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

person Mart    schedule 15.12.2011