Всем доброго дня, взникла следующая проблема. Есть таблица со множеством ячеек, данные в каждой ячейке должны редактироваться во всплывающем окне, при этом результат редактирования должен быть подтвержден или отменен. Для этих целей есть контрол (схематично):
<ItemsControl>
<ItemsControl.BindingGroup>
<BindingGroup />
</ItemsControl.BindingGroup>
<ItemsControl.Template>
<ControlTemplate>
<StackPanel VerticalAlignment="Stretch">
<ToggleButton x:Name="buttonShowPopup" Content="{Binding Path=Text, RelativeSource={RelativeSource TemplatedParent}}"
IsChecked="{Binding Path=IsOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
<Popup x:Name="popup" PlacementTarget="{Binding ElementName=buttonShowPopup}"
IsOpen="{Binding Path=IsOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
StaysOpen="true" MouseLeave="popup_MouseLeave">
<Border BorderBrush="Black" BorderThickness="2" Padding="5">
<StackPanel>
<ItemsPresenter/>
<StackPanel>
<Button Height="25" Margin="1" Content="ОК" Name="btnOK" Click="btnOK_Click"/>
<Button Height="25" Margin="1" Content="Отмена" Name="btnCancel" Click="btnCancel_Click"/>
</StackPanel>
</StackPanel>
</Border>
</Popup>
</StackPanel>
</ControlTemplate>
</ItemsControl.Template>
</ItemsControl>
private void CancelEdit()
{
IsOpen = false;
BindingGroup.CancelEdit();
BindingGroup.BeginEdit();
}
private void btnOK_Click(object sender, RoutedEventArgs e)
{
IsOpen = false;
BindingGroup.CommitEdit();
BindingGroup.BeginEdit();
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
CancelEdit();
}
Используется он следующим образом:
<MyPopupControl Grid.Column="32" Text="{Binding Path=Prop1, Converter={StaticResource enumToStringConverter}}">
<RadioButton Content="Значение1"
IsChecked="{Binding Path=Prop1, Converter={StaticResource enumToBooleanConverter}, ConverterParameter=Value1}"/>
<RadioButton Content="Значение1"
IsChecked="{Binding Path=Prop2, Converter={StaticResource enumToBooleanConverter}, ConverterParameter=Value2}"/>
</MyPopupControl>
При первом открытии попапа и сохранении/отмене результатов все работает, но при повторном открытии — изменения перестают сохраняться. Заметил, что при каждом открытии попапа исчезает один элемент в коллекции BbindingGroup.BindingExpressions. Подскажите в чем может быть проблема?