更新的值未反映在WPF中的UI中

问题描述 投票:0回答:1

我正在尝试在ListView中动态填充和导航面板

<ListView Background="Transparent" HorizontalAlignment="Center" x:Name="viewItemControl" ItemsSource="{Binding Views}">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel/>
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Button Style="{StaticResource PluginViewButton}" 
                        Command="{Binding ElementName=viewItemControl,Path=DataContext.NavigateCommand}" 
                        CommandParameter="{Binding ViewName}" 
                        BorderThickness="{Binding Path = ViewObj.DataContext.IsSelected, Converter={StaticResource BoolToThicknessConverter},Mode=OneWay}">
                    <Button.Content>
                        <Grid Background="White">
                            <Grid.RowDefinitions>
                                <RowDefinition/>
                                <RowDefinition Height="15"/>
                            </Grid.RowDefinitions>
                            <Image Grid.Row="0" Source="{Binding Icon, Mode=OneTime}"></Image>
                            <TextBlock Grid.Row="1" Text="{Binding DisplayableName}" HorizontalAlignment="Center"/>
                        </Grid>
                    </Button.Content>
                </Button>
            </DataTemplate>
        </ListView.ItemTemplate>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Focusable" Value="false"/>
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>

列表视图已绑定到ViewInfo对象的集合

public class ViewInfo
{
    public ViewInfo(IPluggableView view)
    {
        ViewName = view.ViewName;
        DisplayableName = view.DisplayableName;
        DisplayRank = view.DisplayRank;
        Icon = view.Icon;
        ViewModelType = view.ViewModelType;
        ViewObj = view;
    }
    public IPluggableView ViewObj { get; set; }
    public string ViewName { get; set; }
    public string DisplayableName { get; set; }
    public Type ViewModelType { get;set; }
    public int DisplayRank { get; set; }
    public BitmapSource Icon { get; set; }
}

接口IPluggableView由我所有的视图用户控件实现

我的viewmodel基类具有属性IsSelected。Viewmodel类正在实现棱镜INavigationAware接口,因此在OnNavigatedTo和OnNavigatedFrom函数中,我正在更新IsSelected属性。

[我希望在选择视图时我的按钮边框变粗,当我导航到下面给出的另一个视图时,它应该恢复为默认值。

Navigation Panel

所以我写了BoolToThickness转换器,根据值简单地返回0.5或2。

我面临的问题是,即使在我更新IsSelected属性时,它在加载时仅更新一次,之后再也没有更新。

我确定UI不会收到RaisePropertyChanged事件。但是我知道可以解决这个问题。如果这是设计问题,请帮助我进行纠正。

我正在尝试在ListView中动态填充和导航面板...

wpf data-binding prism software-design
1个回答
0
投票

您应该覆盖ItemContainerStyle并直接在IsSelected上触发:

© www.soinside.com 2019 - 2024. All rights reserved.