DataGrid привязан к Collection - добавьте UserControls в один столбец - PullRequest
0 голосов
/ 04 марта 2012

Я пишу графический интерфейс для передачи через торрент-сервер. Для хранения информации о торренте я использую ObservableCollection:

    public partial class Torrents
{
    private static ObservableCollection<Torrent> _list = new ObservableCollection<Torrent>();
    public static ObservableCollection<Torrent> List { get { return _list; } }
}

Для отображения торрентов я использую DataGrid, которая привязана к моей коллекции ObservableCollection:

<DataGrid x:Name="dataGrid" CanUserReorderColumns="True" AutoGenerateColumns="False" ItemsSource="{Binding Source={StaticResource TorrentsClass}, Path=List}" CanUserResizeRows="False" CanUserSortColumns="True" IsReadOnly="True" CellStyle="{StaticResource RightAlignment}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="#" Binding="{Binding Path=Id}" />
            <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
            <DataGridTextColumn Header="Size" Binding="{Binding Path=Size, Converter={StaticResource SizeConverter}}"/>
            <DataGridTextColumn Header="Download Speed" Binding="{Binding Path=DownSpeed, Converter={StaticResource SpeedConverter}}"/>
            <DataGridTextColumn Header="Upload Speed" Binding="{Binding Path=UpSpeed, Converter={StaticResource SpeedConverter}}"/>
            <DataGridTextColumn Header="Ratio" Binding="{Binding Path=Ratio, StringFormat=F2}"/>
        </DataGrid.Columns>
    </DataGrid>

Пока все работает (пока не могу опубликовать изображения):

image

Но для отображения статуса торрента (будь то пауза, загрузка, заполнение, перепроверка и прогресс на указанных вещах) я хочу иметь индикатор выполнения, как в uTorrent:

image

Я создал пользовательский UserControl с ProgressBar и TextBlock, и он работает.

Но как добавить UserControl в столбец Status? И как привязать к нему данные из моей ObservableCollection? Я думаю, поскольку он будет предоставлять несколько данных (прогресс, перечисление с состоянием торрента), возможно ли связать его с объектом с указанными свойствами?

Позже я буду реализовывать контекстные меню в DataGrid, чтобы позволить приостанавливать выбранные торренты (пока не знаю, как ... пока) и т. Д., Возможно, использование DataGrid не лучшая идея? Что бы вы предложили, если нет?

Ответы [ 2 ]

2 голосов
/ 04 марта 2012

ПРИМЕЧАНИЕ: я предполагаю, что вы используете встроенный .NET 4.0 DataGrid.


Вы захотите использовать DataGridTemplateColumn. Образец впереди:

<DataGrid ...>
  <DataGrid.Columns>
    <DataGridTemplateColumn>
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
          <my:MyProgressBar Progress="{Binding Progress}" Text="{Binding Status}" ...>
        </DataTemplate>
      </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
  </DataGrid.Columns>
</DataGrid>

Я догадался, как называются ваши свойства.

2 голосов
/ 04 марта 2012

Используйте DataGridTemplateColumn.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...