WPF MVVMアプリケーションにクラスがあり、ポップアップフォームで表示して、そのメンバーの一部を管理したいと思います。
public class Route
{
public string Name { get; set; }
public List<RouteSegment> MandatorySegments { get; set; }
}
public class RouteSegment
{
public decimal Id { get; set; }
public string Name { get; set; }
}
メンバーフィールドのいくつかを追加しただけで、残りは関係ありません。
私がやりたいのは、MandatorySegments
リストにあるすべてのアイテムをデータグリッドのコンボボックスに表示して、新しいメンバーを簡単に追加および削除できるようにすることです。
これは私がこれまでに持っているコードです:
私のViewModelで
public RouteTest SelectedRoute { get; set; }
public ObservableCollection<RouteSegment> AllRouteSegments { get; private set; }
public RouteSegment SelectedMandatorySegment { get; set; }
私からしてみれば
<DataGrid Grid.RowSpan="2"
AutoGenerateColumns="False" HorizontalAlignment="Left" Margin="5,6,0,5" Name="dgMandatorySegments" VerticalAlignment="Stretch" Width="306"
ItemsSource="{Binding SelectedRouteTest.MandatorySegments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" CanUserResizeRows="False" CanUserSortColumns="False" CanUserResizeColumns="False" CanUserReorderColumns="False"
CanUserAddRows="{StaticResource False}" SelectionMode="Single" SelectedItem="{Binding SelectedMandatorySegment, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Route Segment">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.AllRouteSegments, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
ItemTemplate="{StaticResource CboxItemTemplate}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
私が見逃しているのは、テンプレート化されたグリッド列のコンボボックスのSelectedValue
またはです。SelectedItem
これで、グリッド内にリスト内の要素と同じ数の行があり、すべての要素ItemsSource
から選択できるため、コンボボックスのが適切にバインドされます。RouteSegment
ただし、データグリッド内のすべての行の初期値は常に空です。コンボボックスのは何SelectedValue
にバインドする必要がありますか?