Перебор Silverlight DataGrid - PullRequest
       5

Перебор Silverlight DataGrid

1 голос
/ 13 марта 2009

В ASP.NET часто пишут такой код:

foreach(DataListItem item in theDataList.Items){
    MyUserControl foo = item.FindControl("myUserControl") as MyUserControl;
    foo.DoSomethingNice();
}

В Silverlight, как можно перебирать составляющие элементы управления DataGrid (или другого элемента управления, связанного с коллекцией)? Я хотел бы установить непрозрачность для каждого из них примерно на 0,5, а затем, когда они обрабатываются, обновить непрозрачность до 1.

Используя свойство ItemSource, можно получить ссылку на базовый IEnumerable, который привязан, но я бы хотел фактическую ссылку на элемент управления.

Чтобы сделать это более конкретным, предположим, что у вас есть пользовательский элемент управления, подобный этому:

<UserControl x:Class="GridTest.TestControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="Auto" Height="25">
    <StackPanel Orientation="Horizontal">
        <TextBox Width="150" Text="{Binding FirstName}" />
        <TextBox Width="150" Text="{Binding LastName}" />
    </StackPanel>
</UserControl>

Ваш шаблон DataGrid выглядит так:

<data:DataGrid x:Name="theDataGrid">
            <data:DataGrid.Columns>
                <data:DataGridTemplateColumn Header="People" Width="Auto">
                    <data:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <this:TestControl />
                        </DataTemplate>
                    </data:DataGridTemplateColumn.CellTemplate>
                </data:DataGridTemplateColumn>
            </data:DataGrid.Columns>
        </data:DataGrid>

Вы связываете так:

theDataGrid.AutoGenerateColumns = false;
people = new List<Person>( 
    new Person[]{
                new Person { FirstName = "John", LastName = "Carmack" },
                new Person { FirstName = "Linus", LastName = "Torvalds" }
    }
);
theDataGrid.ItemsSource = people;

Ответы [ 2 ]

1 голос
/ 14 марта 2009

Я бы подошел к вашей проблеме, используя конвертер для свойства opacity. Позвольте мне объяснить.

Хорошим подходом Silverlight к привязке данных является связь между моделью и пользовательским интерфейсом. Это достигается путем использования ObservableCollection вместо List для списков привязок, которые изменяют пользовательский интерфейс, или реализации INotifyPropertyChanged для объектов со свойствами, которые изменяют пользовательский интерфейс.

Это позволяет избежать кода, который анализирует и изменяет проблемы пользовательского интерфейса.

По сути, вам нужно связать данные с любыми данными, которые вам нужны, чтобы изменить непрозрачность, и положиться на преобразователь, который вернет значение непрозрачности на основе значения базы данных. Классно!

0 голосов
/ 05 июня 2009

Может быть, вы можете добавить событие «Loaded» для вашего UserControl, тогда вы можете получить ссылку на элемент управления следующим образом: 'TestControl testCtl = sender as TestControl;'

...