私は2つのコンボボックスを持っています。最初のアクティビティでアクティビティを選択すると、関連するサブアクティビティが2番目のコンボボックスに表示されます。コードは MVVM スタイルに従って問題ないように見えますが、最初のアクティビティでアクティビティを選択すると、2 番目のコンボボックスの関連するサブアクティビティが同期されません。ここに私のコードがあります :
<Window x:Class="TestDGCombosBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestDGCombosBinding"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<ObjectDataProvider x:Key="ActivitiesDataProvider" ObjectType="{x:Type local:Activities}" MethodName="GetActivities"/>
<local:DebugConverter x:Key="DebugConverter" />
</Grid.Resources>
<DataGrid
Grid.Row="1" Grid.Column="1"
AutoGenerateColumns="False"
SelectionUnit="CellOrRowHeader"
SelectionMode="Single"
IsSynchronizedWithCurrentItem="True"
RowBackground="White"
AlternatingRowBackground="LightGray"
AlternationCount="2" Name="dataGrid1" CurrentCellChanged="dataGrid1_CurrentCellChanged">
<DataGrid.BindingGroup>
<BindingGroup />
</DataGrid.BindingGroup>
<DataGrid.Resources>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Activities Custom" CanUserSort="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Text="{Binding CurrentActivity}"
SelectedValuePath="ActivityID"
DisplayMemberPath="ActivityName"
ItemsSource="{Binding Source={StaticResource ActivitiesDataProvider}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="SubActivities Custom" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox Text="{Binding CurrentSubActivity}"
SelectedValuePath="SubActivityID"
DisplayMemberPath="SubActivityname"
ItemsSource="{Binding Path=SubActivitiesOfCurrentActivity}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
モデル
public class Activities
{
public DataView GetActivities()
{
return ActivitiesAccess.GetAllActivities();
}
}
ビューモデル
public class ActivitiesViewModel : INotifyPropertyChanged
{
public ActivitiesViewModel()
{ }
private int currentActivity;
public int CurrentActivity
{
get { return currentActivity; }
set {
currentActivity = value;
SubActivitiesOfCurrentActivity = ActivitiesAccess.GetAllSubActivitiesinActivity(currentActivity);
OnPropertyChanged("CurrentActivity");
}
}
private DataView subActivitiesOfCurrentActivity;
public DataView SubActivitiesOfCurrentActivity
{
get {return subActivitiesOfCurrentActivity; }
set
{
subActivitiesOfCurrentActivity = value;
OnPropertyChanged("SubActivitiesOfCurrentActivity");
}
}
private int currentSubActivity;
public int CurrentSubActivity
{
get { return currentSubActivity; }
set
{
currentSubActivity = value;
OnPropertyChanged("CurrentSubActivity");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
最初のドロップダウンからアクティビティを選択してコードをデバッグすると、CurrentActivity プロパティの値が常に 0 になり、その理由がわかりません。この値は、選択したアクティビティの ActivityID と同じである必要があります。助けを求めてたくさん検索しましたが、何も見つかりませんでした。誰かがコードの問題を特定できれば、とてもうれしいです。