我正在尝试将我的C#
代码转换为xaml。
有效的c#代码是
g_DataGrid[TablesManagerDataGrids.DG_Idx.DG_Fixtures].SetBinding(ItemsControl.ItemsSourceProperty, new Binding { Source = g_dataSet.Tables[TABLE_FIXTURES] })
DataGridComboBoxColumn colPlatform = new DataGridComboBoxColumn();
colPlatform.Header = COL_FIXTURE_PLATFORM;
colPlatform.ItemsSource = g_dataSet.Tables[TABLE_PLATFORM].Rows;
colPlatform.DisplayMemberPath = "[" + COL_PLATFORM_NAME + "]";
colPlatform.SelectedValuePath = "[" + COL_PLATFORM_IDX + "]";
Binding temp = new Binding(COL_FIXTURE_PLATFORM);
colPlatform.SelectedValueBinding = new Binding(COL_FIXTURE_PLATFORM);
colPlatform.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
该代码将一个ComboBox列添加到数据网格,以修改表COL_FIXTURE_PLATFORM
中的列TABLE_FIXTURES
。
ComboBox的值来自列TABLE_PLATFORM
中的表COL_PLATFORM_IDX
。
ComboBox DropDownList的字符串来自列COL_PLATFORM_NAME
中的表TABLE_PLATFORM。
现在我正在尝试将此代码转换为xaml代码,但我对这种语言来说太棒了。 下面的代码是我在一些测试后可以编写的最好的代码,但它不是我之前描述过的。
DataContext设置为我的DataSet.Tables
this.DataContext = g_Dataset.CurrentDataSet.Tables;
XAML代码是:
<DataGrid x:Key="DG_Fixtures_Structure" AutoGenerateColumns="false" ItemsSource="{Binding Path=[Fixtures]}" >
<DataGrid.Columns>
<DataGridTextColumn Header="Name"
Binding="{Binding Path=Name}"/>
<DataGridComboBoxColumn Header="Platform"
ItemsSource="{Binding RelativeSource={RelativeSource Findancestor, AncestorType={x:Type Window}}, Path=DataContext[Platform]}"
DisplayMemberPath="Name"
SelectedValuePath="Index"
SelectedValueBinding="{Binding Path=Platforms}"/>
</DataGrid.Columns>
</DataGrid>
当加载数据网格时,调试器会显示以下错误,并且组合框中没有数据。
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Window', AncestorLevel='1''. BindingExpression:Path=PlacementTarget.DataContext[Platform]; DataItem=null; target element is 'DataGridComboBoxColumn' (HashCode=12880602); target property is 'ItemsSource' (type 'IEnumerable')
有人可以帮助我吗?
答案 0 :(得分:0)
最后,我找到了一种方法/解决方法,使其工作。 解决方案是在创建类之后在代码中设置ItemsSource。
似乎WPF无法解析分配,因为通过调试,DataGrids中为组合框设置的ItemSource总是为空。