1

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にバインドする必要がありますか?

4

2 に答える 2

0

DisplayMemberPathはおそらくあなたが望むものです。次の ComboBox は、私の WPF アプリケーションの DataGrid でうまく機能します。(アプリケーションで機能させるには、バインディング パスを更新する必要があることに注意してください。)

<ComboBox ItemsSource="{Binding Path=AllRouteSegments}" DisplayMemberPath="Name" SelectedItem="{Binding Path=SelectedMandatorySegment, UpdateSourceTrigger=PropertyChanged}"/>
于 2013-06-20T06:34:20.463 に答える