我有一个XamDataGrid,其ObservableCollection为Items作为DataSource。 Item有两个属性A和B,A和B都有Value属性。我想将这两个Value属性绑定到我的两个Fields。
显然这样的事情不起作用:
<Field Name="A.Value"/>
我读了一些关于AlternateBinding的内容,但这对我来说也不起作用:
<Field AlternateBinding="A.Value"/>
我还没有找到关于如何使用AlternateBinding的好教程,所以我真的不知道如何使用它。
修改
当我使用UnboundField时,它会起作用:
<UnboundField Name="Value" BindingPath="A.Value" BindingMode="TwoWay"/>
但是它说UnboundField已弃用,我应该使用Field。我希望我知道如何。
答案 0 :(得分:1)
将Items上的属性设置为公共,并将Fields的名称设置为属性的名称。
示例:
<Window x:Class="WPFXamDataGrid.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-mpatibility/2006"
xmlns:igDP="http://infragistics.com/DataPresenter"
xmlns:local="clr-namespace:WPFXamDataGrid"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<igDP:XamDataGrid x:Name="xamDataGrid" Loaded="XamDataGrid_Loaded">
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:Field Name="Name"/>
<igDP:Field Name="Date"/>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
</Grid>
</Window>
using System;
using System.Collections.ObjectModel;
using System.Windows;
namespace WPFXamDataGrid
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void XamDataGrid_Loaded(object sender, RoutedEventArgs e)
{
ObservableCollection<Item> list = new ObservableCollection<Item>();
list.Add(new Item {Name = "First", Date = DateTime.Now});
list.Add(new Item { Name = "Second", Date = ateTime.Now.AddDays(-1);
xamDataGrid.DataSource = list;
}
}
class Item
{
public string Name { get; set; }
public DateTime Date { get; set; }
}
}
编辑一个:
<Style x:Key="CellStyle" TargetType="{x:Type igDP:CellValuePresenter}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type igDP:CellValuePresenter}}}">
<TextBlock Text="{Binding Path=Value.Length}" FontWeight="Bold" />
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
<igDP:Field Name="Name" CellValuePresenterStyle="{StaticResource CellStyle}"/>
答案 1 :(得分:1)
实际上,您几乎明白了。
<Field Name="Test" AlternateBinding="{Binding A.Value}"/>