私は次のような単純なオブジェクトを持っています:
class Item
{
....
public String Measure { get; set; }
public String[] Measures {get; }
}
これは、2つのテキスト列とコンボボックス列を持つDataGridにバインドしようとしています。コンボボックス列の場合、プロパティMeasureは現在の選択であり、可能な値を測定します。
私のXAMLは次のとおりです。
<DataGrid Name="recipeGrid" AutoGenerateColumns="False"
CellEditEnding="recipeGrid_CellEditEnding" CanUserAddRows="False"
CanUserDeleteRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Food" Width="Auto"
Binding="{Binding Food.Name}" />
<DataGridTextColumn Header="Quantity" IsReadOnly="False"
Binding="{Binding Quantity}" />
<DataGridComboBoxColumn Header="Measure" Width="Auto"
SelectedItemBinding="{Binding Path=Measure}"
ItemsSource="{Binding Path=Measures}" />
</DataGrid.Columns>
</DataGrid>
テキスト列は問題なく表示されますが、コンボボックスは表示されません。値はまったく表示されません。バインディングエラーは次のとおりです。
System.Windows.Dataエラー:2:ターゲット要素の管理FrameworkElementまたはFrameworkContentElementが見つかりません。 BindingExpression:Path = Measures; DataItem = null;ターゲット要素は 'DataGridComboBoxColumn'(HashCode = 11497055);ターゲットプロパティは「ItemsSource」(タイプ「IEnumerable」)です。
これを修正するにはどうすればよいですか?
これが最善の解決策です。
http://wpfthoughts.blogspot.com/2015/04/cannot-find-governing-frameworkelement.html
ここでの考え方は、CollectionViewSourceを静的リソースとして宣言し、それをDataGridComboBoxColumnのItemsSourceに宣言的にバインドすることです。 。
静的CollectionViewSourceを作成してバインドします。
<Page.Resources>
<CollectionViewSource x:Key="Owners" Source="{Binding Owners}"/>
</Page.Resources>
次に、ターゲットのItemsSourceをバインドします。
ItemsSource="{Binding Source={StaticResource Owners}}"
メジャーがすべてのオブジェクトに共通である場合は、メジャーを静的にすることができます
public String[] Measures { get; }
そして、xamlは以下に示すようにそれを使用します:
<DataGridComboBoxColumn
Header="Role"
SelectedValueBinding="{Binding Role}"
ItemsSource="{Binding Source={x:Static local:ProjectsDataContext.Roles}}"
DisplayMemberPath="Name"/>
うまくいけば、それが役立つでしょう。