我正在尝试在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属性。
[我希望在选择视图时我的按钮边框变粗,当我导航到下面给出的另一个视图时,它应该恢复为默认值。
所以我写了BoolToThickness转换器,根据值简单地返回0.5或2。
我面临的问题是,即使在我更新IsSelected属性时,它在加载时仅更新一次,之后再也没有更新。
我确定UI不会收到RaisePropertyChanged事件。但是我知道可以解决这个问题。如果这是设计问题,请帮助我进行纠正。
我正在尝试在ListView中动态填充和导航面板
您应该覆盖ItemContainerStyle
并直接在IsSelected
上触发: