1
可以說我的數據網格中有2列:列A:已選中,列B:名稱。 Selected列是一個複選框。名稱列是文本字段。如果選中列A的複選框,我想在'名稱'列中將文本的顏色設置爲藍色,否則將其設置爲紅色。WPF DataGrid綁定列之間的數據
本質上我不知道如何綁定數據網格的列之間的數據。而示例代碼/鏈接提供的例子將是有用的。
可以說我的數據網格中有2列:列A:已選中,列B:名稱。 Selected列是一個複選框。名稱列是文本字段。如果選中列A的複選框,我想在'名稱'列中將文本的顏色設置爲藍色,否則將其設置爲紅色。WPF DataGrid綁定列之間的數據
本質上我不知道如何綁定數據網格的列之間的數據。而示例代碼/鏈接提供的例子將是有用的。
我還沒有使用WPF Toolkit's DataGrid很多,但從我可以收集的,一種方法是使用DataGridTemplateColumn的,然後根據綁定設置DataTriggers。
這是一個使用DataTriggers設置前景顏色樣式以及整個行的背景顏色的示例。值得注意的是,你需要在你的ItemsSource的綁定中使用一個布爾型屬性來使這個方法成爲可能。
XAML
<Window.Resources>
<Style TargetType="{x:Type tk:DataGridRow}">
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Background" Value="Yellow" />
</DataTrigger>
</Style.Triggers>
</Style>
<Style TargetType="{x:Type TextBlock}" x:Key="MyTextBlockStyle">
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger
Binding="{Binding Path=IsSelected}" Value="False">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<tk:DataGrid x:Name="MyGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding}">
<tk:DataGrid.Columns>
<tk:DataGridTemplateColumn Header="Selected"
Width="75">
<tk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSelected}"/>
</DataTemplate>
</tk:DataGridTemplateColumn.CellTemplate>
</tk:DataGridTemplateColumn>
<tk:DataGridTemplateColumn Header="Name" Width="100" >
<tk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Name}"
Style="{StaticResource MyTextBlockStyle}" />
</DataTemplate>
</tk:DataGridTemplateColumn.CellTemplate>
</tk:DataGridTemplateColumn>
</tk:DataGrid.Columns>
</tk:DataGrid>
</Grid>
代碼隱藏
public partial class DataGridDataTrigger : Window
{
public List<Person> People { get; set; }
public DataGridDataTrigger()
{
InitializeComponent();
var names = new List<string> { "Joe", "Bob", "Frank", "Scott", "Mike" };
People = new List<Person>();
names.ForEach(x => People.Add(new Person { Name = x }));
People.ForEach(x =>
{
if(x.Name.Contains("o"))
x.IsSelected = true;
});
MyGrid.DataContext = People;
}
}
public class Person
{
public string Name { get; set; }
public bool IsSelected { get; set; }
}
地鐵藍精靈,感謝您的回答。這個對我有用。 – Markus2k 2010-04-19 02:11:31