VisualBrush в DataTemplate не перерисовывается

У меня есть ListView для отображения вложений, и у каждого вложения есть кнопка удаления. Когда я изменяю ItemSource для списка (т. Е. При просмотре другого элемента с другими вложениями), значок кнопки удаления больше не рисуется.

Вот шаблон

   <DataTemplate x:Key="attachmentListData">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>

                </Grid.ColumnDefinitions>
                <Label Grid.Column="0">
                    <TextBlock TextTrimming="CharacterEllipsis" Text="{Binding Path=filename}" TextDecorations="{Binding Path=deleted, Converter={StaticResource deletedStrikethroughConverter}}"  />
                </Label>
                <Button Grid.Column="1" Visibility="{Binding Path=deleted, Converter={StaticResource attachmentDeleteButtonVisibilityConverter}}" Style="{DynamicResource MetroCircleButtonStyle}" Width="40" Height="40" Click="onDeleteAttachmentClicked">
                    <Rectangle Fill="Black" Width="15" Height="15">
                        <Rectangle.OpacityMask>
                            <VisualBrush Visual="{StaticResource appbar_close}" Stretch="Fill" />
                        </Rectangle.OpacityMask>
                    </Rectangle>
                </Button>
            </Grid>
        </DataTemplate>

Я смог обойти эту проблему, нарисовав иконку appbar_close в другом месте экрана, но установив видимость скрытой. Если значок не находится где-то еще на экране, после изменения ItemSource значок перестанет рисовать.

Очевидно, что это обходной путь, но какой лучший способ гарантировать, что значок все еще появляется?

2 ответа

Я думаю, что вы отсутствует свойство DataType на DataTemplate. http://msdn.microsoft.com/en-us/library/system.windows.datatemplate.datatype.aspx. Я был бы удивлен, если бы это не давало вам ошибку привязки в строке, где вы привязываете кнопку Видимость.

Вы можете установить x:Shared=False в appbar_close, а также вы должны использовать PresentationOptions: Freeze, RenderOptions для производительности.

Надеюсь, поможет.

Другие вопросы по тегам