だから、私はこれを間違った方法で行っているかもしれませんが、それでもうまくいくはずだと思います. データベースから項目をロードする ListBox があります。
<UserControl.Resources>
<DataTemplate x:Key="DataTemplateListBox">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="60" />
<ColumnDefinition Width="130" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" x:Name="cbNonFat" VerticalAlignment="Center" Margin="14,0,10,0" IsChecked="{Binding IsNonFat, Mode=TwoWay}">
</CheckBox>
<ComboBox HorizontalAlignment="Left" Width="120" Grid.Column="4" Name="cbbSeason" Margin="0,0,10,0" Tag="{Binding Season, Mode=TwoWay}" Loaded="cbbSeason_Loaded" SelectionChanged="cbbSeason_SelectionChanged">
<ComboBoxItem Content="Year Round" Tag="0"/>
<ComboBoxItem Content="Spring/Summer" Tag="1"/>
<ComboBoxItem Content="Fall/Winter" Tag="2"/>
<ComboBoxItem Content="Featured" Tag="3"/>
</ComboBox>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<ListBox Name="lbFlavors" ItemTemplate="{StaticResource DataTemplateListBox}"/>
</Grid>
コード ビハインドで、Tag を Selected Index に変更します。
private void cbbSeason_Loaded(object sender, RoutedEventArgs e)
{
foreach (ComboBoxItem cbi in (sender as ComboBox).Items)
{
if (cbi.Content.ToString() == (sender as ComboBox).Tag.ToString())
{
(sender as ComboBox).SelectedIndex = Convert.ToInt16(cbi.Tag);
break;
}
}
}
次に、選択が変更されたら、タグを更新します。
private void cbbSeason_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
(sender as ComboBox).Tag = (cbbSeason.SelectedItem as ComboBoxItem).Content.ToString();
}
変更をデータベースに保存すると、チェックボックスの変更は成功しますが、コンボボックスは成功しません。cbbSeason_SelectionChanged イベントにブレークポイントを設定すると、タグがまったく更新されないため、明らかにそれが問題ですが、なぜ更新されないのかわかりません。