0

TourGuides のリストを持つ Booking があり、Booking と TourGuides のリストを同時に作成しようとしています。Booking バインディングは機能していますが、TourGuideOnTour は常に null として返されます。

ここに私のモデルがあります:

public class Booking : INotifyPropertyChanged {

    public IList<TourGuide> TourGuidesOnTour {
        get {
            if (_tourGuidesOnTour == null)
                return new List<TourGuide>();
            return _tourGuidesOnTour;
        }
        set {
            _tourGuidesOnTour = value;
            OnPropertyChanged("TourGuidesOnTour");
        }
    }
}

public class TourGuide : INotifyPropertyChanged {

    string _tourGuideFirstName;

    public string TourGuideFirstName {
        get { return _tourGuideFirstName; }
        set {
            _tourGuideFirstName = value;
            OnPropertyChanged("TourGuideFirstName");
        }
    }
}

そして、ここに私のバインディングがあります:

    <Grid Name="myGrid" DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <StackPanel Margin="10">
        <StackPanel.Resources>
            <Style TargetType="{x:Type StackPanel}">
                <Setter Property="Margin" Value="0,10,0,0"/>
            </Style>
        </StackPanel.Resources>
        <GroupBox Header="Tour Information">
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="Tour" Width="130"/>
                    <TextBox Grid.Row="1" Grid.Column="1" Width="185">
                        <TextBox.Text>
                            <Binding Path="TourName"  UpdateSourceTrigger="PropertyChanged">
                                <Binding.ValidationRules>
                                    <ExceptionValidationRule />
                                </Binding.ValidationRules>
                            </Binding>
                        </TextBox.Text>
                    </TextBox>
                </StackPanel>
        </GroupBox>
        <GroupBox Header="Tour Guide Information">
            <DataGrid ItemsSource="{Binding Path=TourGuidesOnTour, Mode=TwoWay}">

            </DataGrid>
        </GroupBox>
        <Button Name="Save" Content="Save" Click="Save_Click" Width="170" Height="40" />
    </StackPanel>
</Grid>

私は自分のデータコンテキストを設定しました:

        public Booking ReturnValue;// = null;
    public CreateBooking() {
        InitializeComponent();
        ReturnValue = new Booking();
        myGrid.DataContext = ReturnValue;
    }

ReturnValue.TourGuidesOnTour等しいnull:(

誰でも理由を教えてもらえますか?

4

1 に答える 1

1

TourGuidesOnTour を初期化している投稿されたコードのどこにも表示されません。

ReturnValue.TourGuidesOnTour = new List<TourGuide>();

そうしないと、getter は常に TourGuide の新しいリストを返しますが、内部変数を初期化することはありません。

そのため、TourGuidesOnTour を初期化するか、ゲッターを次のように変更することができます。

get
{
  if (_tourGuidesOnTour == null)
     _tourGuidesOnTour= new List<TourGuide>();

   return _tourGuidesOnTour;
}
于 2012-12-17T00:09:17.347 に答える