私が試みていること
- ViewModel の一部である FilesToAdd というリストにバインドされた Datagrid があります。
- そのデータグリッドに Combobox 列があります。
- ComboBox の選択項目を FilesToAdd リスト項目の DocumentType プロパティにバインドしたいと考えています。
- ただし、使用可能な選択肢のリストを、FilesToAdd リストではなく、ViewModel 自体のプロパティである AvailableDocumentTypes から取得したいと考えています。
XAML
<DataGrid ItemsSource="{Binding FilesToAdd}" Height="100" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" MaxHeight="100" AutoGenerateColumns="False" Visibility="{Binding FilesAreQueued, Converter={StaticResource BoolToVisConverter}}">
<DataGrid.Resources>
<app:BindingProxy x:Key="Proxy" Data="{Binding}"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="File Will be Uploaded As" Binding="{Binding FileDisplayText}"/>
<DataGridTextColumn Header="Size" Binding="{Binding FileSizeInText}"/>
<DataGridComboBoxColumn ItemsSource="{Binding AvailableDocumentTypes}" Header="Document Type" Visibility="{Binding Data.DocumentTypesAreRequired, Converter={StaticResource BoolToVisConverter}, Source={StaticResource Proxy} }">
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
更新 1: 現在試している XAML + DataContext の説明
ケビンの提案に従って、私は試しました:
<DataGridComboBoxColumn ItemsSource="{Binding DataContext.AvailableDocumentTypes, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window }}}" Header="Document Type" Visibility="{Binding Data.DocumentTypesAreRequired, Converter={StaticResource BoolToVisConverter}, Source={StaticResource Proxy} }"/>
また試しました:
<DataGridComboBoxColumn ItemsSource="{Binding Path=DataContext.AvailableDocumentTypes, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window }}}" Header="Document Type" Visibility="{Binding Data.DocumentTypesAreRequired, Converter={StaticResource BoolToVisConverter}, Source={StaticResource Proxy} }"/>
しかし、見つからないというエラーが表示されます。
参考までに、私の DataContext は次のように設定されています。
XAML では:
<Window x:Class="VEUploader.WPF.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:VEUploader.WPF"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
Title="{Binding WindowTitle}" SizeToContent="WidthAndHeight"
DataContext="{StaticResource UploaderViewModel}"
AllowDrop="True"
>
コード内 (依存性注入を実行できるように):
public MainWindow()
{
var uploaderViewModel = new UploaderViewModel(ObjectFactory.GetInstance<IVEDocumentService>(), ObjectFactory.GetInstance<IArgumentSettingsRetriever>(), ObjectFactory.GetInstance<IVEBudgetService>());
Resources["UploaderViewModel"] = uploaderViewModel;
InitializeComponent();
}