2011-10-21 10 views
5

Tôi có một DataGrid với cột có tên là Màu.Nền tế bào DataFrid WPF bằng cách sử dụng ràng buộc

<DataGridTextColumn Header="Color" Binding="{Binding MyColor.Percentage}"/> 

ItemSource của DataGrid là một đối tượng có thuộc tính MyColor bên trong.

public class MyColor 
{ 
    Color Background { get; set; } 
    int Percentage { get; set; } 
} 

Khi cột mục được đặt tự động điền với giá trị Percentage. Bây giờ tôi muốn đặt nền của mỗi ô trong cột này thành màu tương ứng với thuộc tính MyColor.Color. Có cách nào để làm điều đó bằng cách sử dụng ràng buộc? Một cái gì đó như

Background="{Binding MyColor.Color}" 

Color thuộc tính ở định dạng html #XXXXXXXX (được gọi là định dạng html?).

Trả lời

9

Bạn có thể thiết lập nó qua CellStyle:

<DataGridTextColumn Header="Color" Binding="{Binding MyColor.Percentage}"> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="Background" Value="{Binding MyColor.Background}" /> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
</DataGridTextColumn> 

Ngoài ra bạn phải thay đổi lớp MyColor của bạn để có một tài sản với loại Brush, không ColorBackground. Hoặc bạn có thể sử dụng công cụ chuyển đổi để chuyển đổi Color thành SolidColorBrush.

+0

Ok, tôi đã quản lý chuyển đổi đầu vào thành SolidColorBrush, nhưng có sự cố. Tôi gán ItemSource cho DataGrid bằng Dispatcher vì phần còn lại của ứng dụng của tôi và khi tôi thêm mã XAML của bạn vào đó, nó sẽ xuất hiện lỗi "Phải tạo DependencySource trên cùng một Thread với DependencyObject" –