绑定 WPF DataGrid 列 Header 单元格值中的文本
Bind WPF DataGrid Column Header Text in a Cell Values
我有一个 DataGrid,我希望在单元格的每个值中附加列 Header 文本
XAML源代码是
<Window x:Class="DataGrid_Index.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:cust="clr-namespace:DataGrid_Index" >
<Grid>
<DataGrid Name="Grid1" AutoGenerateColumns="False" ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" SelectionUnit="Cell" SelectionChanged="Grid1_SelectionChanged" >
<DataGrid.Columns>
<!--Column 1-->
<DataGridTextColumn Binding="{Binding MobileName}" Header="Name" />
<!--Column 2-->
<DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
C# 视图模型是
public class MobileVM : ViewModel
{
private ObservableCollection<Mobile> _mobileList = new ObservableCollection<Mobile>();
public ObservableCollection<Mobile> MobileList
{
get { return _mobileList; }
set { _mobileList = value; OnPropertyChanged(); }
}
public MobileVM()
{
MobileList = new ObservableCollection<Mobile>()
{
new Mobile() { MobileName = "iPhone 6", MobileOS = "IOS" },
new Mobile() { MobileName = "Galaxy S6", MobileOS = "Android" },
new Mobile() { MobileName = "Lumina", MobileOS = "Windows" }
};
}
}
public class Mobile
{
public string MobileName { get; set; }
public string MobileOS { get; set; }
}
我期待输出
Name OS
_________________________________________
Name: iPhone 6 OS: IOS
Name: Galaxy S6 OS: Android
Name: Lumina OS: Windows
如何在单元格中绑定Column.Header
?请帮助我。
您可以通过这样的 MultiBinding 实现:
<DataGridTextColumn Header="Name" x:Name="NameC">
<DataGridTextColumn.Binding>
<MultiBinding StringFormat=" {0}: {1}">
<Binding ElementName="NameC" Path="Header"></Binding>
<Binding Path="MobileName"></Binding>
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
StringFormat
允许您进行更多自定义。
希望对您有所帮助
我有一个 DataGrid,我希望在单元格的每个值中附加列 Header 文本
XAML源代码是
<Window x:Class="DataGrid_Index.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:cust="clr-namespace:DataGrid_Index" >
<Grid>
<DataGrid Name="Grid1" AutoGenerateColumns="False" ItemsSource="{Binding MobileList, UpdateSourceTrigger=PropertyChanged}" IsReadOnly="True" SelectionUnit="Cell" SelectionChanged="Grid1_SelectionChanged" >
<DataGrid.Columns>
<!--Column 1-->
<DataGridTextColumn Binding="{Binding MobileName}" Header="Name" />
<!--Column 2-->
<DataGridTextColumn Binding="{Binding MobileOS}" Header="OS" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
C# 视图模型是
public class MobileVM : ViewModel
{
private ObservableCollection<Mobile> _mobileList = new ObservableCollection<Mobile>();
public ObservableCollection<Mobile> MobileList
{
get { return _mobileList; }
set { _mobileList = value; OnPropertyChanged(); }
}
public MobileVM()
{
MobileList = new ObservableCollection<Mobile>()
{
new Mobile() { MobileName = "iPhone 6", MobileOS = "IOS" },
new Mobile() { MobileName = "Galaxy S6", MobileOS = "Android" },
new Mobile() { MobileName = "Lumina", MobileOS = "Windows" }
};
}
}
public class Mobile
{
public string MobileName { get; set; }
public string MobileOS { get; set; }
}
我期待输出
Name OS
_________________________________________
Name: iPhone 6 OS: IOS
Name: Galaxy S6 OS: Android
Name: Lumina OS: Windows
如何在单元格中绑定Column.Header
?请帮助我。
您可以通过这样的 MultiBinding 实现:
<DataGridTextColumn Header="Name" x:Name="NameC">
<DataGridTextColumn.Binding>
<MultiBinding StringFormat=" {0}: {1}">
<Binding ElementName="NameC" Path="Header"></Binding>
<Binding Path="MobileName"></Binding>
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
StringFormat
允许您进行更多自定义。
希望对您有所帮助