- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 ListView 和 2 个用于显示 ListView 的资源:BooksGridView 和 ImageDetailView。
ViewModel 有一个名为 ViewMode 的字符串属性,其中包含我当前要显示的 View 的名称。 (改自另一个控件,使用工具栏)
我正在尝试使用 DataTrigger
更改所选 View ,但我似乎无法更改 View 属性。
当我直接设置 View 资源时,会显示正确的 View 。我还添加了背景更改以确保激活数据触发器,并且背景确实发生了变化。
所以我显然在这里遗漏了一些东西......
<UserControl x:Class="eLibrary.View.FilteredBooksView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:Converters="clr-namespace:eLibrary.Converters"
xmlns:Controls="clr-namespace:eLibrary.Controls"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:local="clr-namespace:eLibrary"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Converters:CoverImageConverter x:Key="CoverImageConverter"/>
<BooleanToVisibilityConverter x:Key="BoolToVisConverter" />
<GridView x:Key="BooksGridView">
...
</GridView>
<Controls:TileView x:Key="ImageDetailView">
...
</Controls:TileView>
<CollectionViewSource x:Key="sortedBooks" Source="{Binding Books}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Title" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
<Style TargetType="{x:Type ListView}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ViewMode}" Value="BooksGridView">
<Setter Property="View" Value="{StaticResource BooksGridView}"/>
<Setter Property="Background" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=ViewMode}" Value="ImageDetailView">
<Setter Property="View" Value="{StaticResource ImageDetailView}" />
<Setter Property="Background" Value="Blue"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<ListView
VerticalAlignment="Stretch"
Name="BooksListView"
View="{StaticResource BooksGridView}"
SelectionMode="Extended"
ItemsSource="{Binding Source={StaticResource sortedBooks}}">
<ListView.Resources>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
<Setter Property="Visibility" Value="{Binding Path=ShouldDisplay, Converter={StaticResource BoolToVisConverter} }" />
</Style>
</ListView.Resources>
</ListView>
</UserControl>
谢谢
最佳答案
基于 MSDN 上的示例,以下内容根据 ViewModel 中的更改更改 View 。我可以看到您的代码的唯一区别是使用 DynamicResource
:
<Window x:Class="SDKSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Custom View"
xmlns:l="clr-namespace:SDKSample"
Width="400" Height="500"
SourceInitialized="Window_SourceInitialized">
<Window.Resources>
<DataTemplate x:Key="centralTile">
<StackPanel Height="100" Width="90">
<Grid Width="70" Height="70" HorizontalAlignment="Center">
<Image Source="{Binding XPath=@Image}" Margin="6,6,6,9"/>
</Grid>
<TextBlock Text="{Binding XPath=@Name}" FontSize="13"
HorizontalAlignment="Center" Margin="0,0,0,1" />
<TextBlock Text="{Binding XPath=@Type}" FontSize="9"
HorizontalAlignment="Center" Margin="0,0,0,1" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="iconTemplate">
<DockPanel Height="33" Width="150">
<Image Source="{Binding XPath=@Image}" Margin="2"/>
<TextBlock DockPanel.Dock="Top" Text="{Binding XPath=@Name}"
FontSize="13" HorizontalAlignment="Left"
Margin="0,0,0,1" />
<TextBlock Text="{Binding XPath=@Type}" FontSize="9"
HorizontalAlignment="Left" Margin="0,0,0,1" />
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="checkbox">
<CheckBox IsChecked="{Binding IsSelected, RelativeSource= {RelativeSource AncestorType=ListViewItem}}"
Margin="0,1,1,1" >
</CheckBox>
</DataTemplate>
<XmlDataProvider x:Key="myXmlDataBase" XPath="/myXmlData">
<x:XData>
<myXmlData xmlns="">
<Item Name = "Fish" Type="fish" Image="images\fish.png"/>
<Item Name = "Dog" Type="animal" Image="images\dog.png"/>
<Item Name = "Flower" Type="plant" Image="images\flower.jpg"/>
<Item Name = "Cat" Type="animal" Image="images\cat.png"/>
</myXmlData>
</x:XData>
</XmlDataProvider>
<DataTemplate x:Key="DisplayImage">
<StackPanel Width="50">
<Image Source="{Binding XPath=@Image}"/>
</StackPanel>
</DataTemplate>
<GridView x:Key="gridView">
<GridViewColumn CellTemplate="{StaticResource checkbox}"/>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding XPath=@Name}"/>
<GridViewColumn Header="Type" DisplayMemberBinding="{Binding XPath=@Type}"/>
<GridViewColumn Header="Image" CellTemplate="{StaticResource DisplayImage}"/>
</GridView>
<l:PlainView x:Key="tileView" ItemTemplate="{StaticResource centralTile}" ItemWidth="100"/>
<l:PlainView x:Key="iconView" ItemTemplate="{StaticResource iconTemplate}" ItemWidth="150"/>
<Style TargetType="{x:Type ListView}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ViewName}" Value="iconView">
<Setter Property="View" Value="{DynamicResource iconView}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=ViewName}" Value="tileView">
<Setter Property="View" Value="{DynamicResource tileView}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=ViewName}" Value="gridView">
<Setter Property="View" Value="{DynamicResource gridView}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<ListView Name="lv"
ItemsSource="{Binding Source={StaticResource myXmlDataBase}, XPath=Item}"
FontSize="12"
Background="LightBlue" >
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="gridView" Click="SwitchViewMenu"/>
<MenuItem Header="iconView" Click="SwitchViewMenu"/>
<MenuItem Header="tileView" Click="SwitchViewMenu"/>
</ContextMenu>
</ListView.ContextMenu>
</ListView>
<TextBlock FontSize="16" Foreground="Blue">
CurrentView: <TextBlock Name="currentView" Text="{Binding Path=ViewName}"/>
</TextBlock>
<TextBlock>
Right-click in the content window to change the view.
</TextBlock>
</StackPanel>
</Window>
文件背后的代码:
using System;
using System.Windows;
using System.Windows.Controls;
namespace SDKSample
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
public MainViewModel ViewModel
{
get { return this.DataContext as MainViewModel; }
}
void SwitchViewMenu(object sender, RoutedEventArgs args)
{
MenuItem mi = (MenuItem)sender;
ViewModel.ViewName = mi.Header.ToString();
}
private void Window_SourceInitialized(object sender, EventArgs e)
{
ViewModel.ViewName = "gridView";
}
}
}
最后是 ViewModel 类:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
namespace SDKSample
{
public class MainViewModel : INotifyPropertyChanged
{
public string ViewName
{
get { return viewName; }
set
{
if (viewName == value)
return;
viewName = value;
NotifyPropertyChanged("ViewName");
}
}
private string viewName;
public event PropertyChangedEventHandler PropertyChanged;
void NotifyPropertyChanged(string name)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
关于c# - WPF:通过 DataTrigger 设置 ListView View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4149544/
我想使用带有 DataTrigger 的样式来定义 ResourceDictionary 中控件的一般外观。 是否可以在 View 中指定DataTrigger绑定(bind)路径?如果没有,是否有一
我需要根据用户与搜索功能的交互动态添加 DataTrigger,因此无法在 XAML 中完成。但是,从下面的 XAML 代码中可以看出我正在尝试做的事情的基本目标。它需要根据 ToggleButton
我有一个名为 OperativeCount 的值。当此数字大于 10 时,我希望 DataGridColumn 的颜色发生变化。类似于此; 10"
我在我的 XAML 中定义了一个 DataTrigger,我想在多个地方使用它。是否可以将其定义为资源然后共享? 这是我的触发器:
所以这是我的 XAML:
我正在尝试将我的一些 WPF 技能转换为 Silverlight,并且在我一直在开发的测试迷你应用程序中遇到了一个稍微奇怪的问题。在 WPF 中,我习惯于在样式中使用 DataTriggers 来根据
是否可以使用 DataTrigger 在 WPF 中设置 RotateTransform 的角度?如果是这样,如何? 最佳答案 当然,这样的事情应该有效
我知道我可以创建一个 setter 来检查值是否为 NULL 并执行某些操作。示例:
所以我刚刚加入了一个 Windows Phone 团队,他们倾向于按照以下方式做一些事情: 我查看了它并心想:代码重复,将 2 个元素加载到 UI,这(虽然很小)加载了不必要的内存 - 为什么在任
正如 WPF 经常发生的那样,我可能会以错误的方式处理事情,但我有以下情况: 我想根据 DataTrigger 应用样式,但您不能从样式内部更改样式:
我希望我的 TextBox 有一个 红色背景如果 ViewModel 属性 =“ 无效 ”。我必须改变什么才能有效? 这个版本告诉我背景没有合格的类型名称 .
我有几个项目控件,我需要为它们附加一个事件处理程序 PreviewMouseLeftButtonDown 事件仅在满足某个条件时发生。 我用数据触发器为我的控件设计了一种样式,我检查了它的绑定(bin
当我的绑定(bind)表字段时,我希望我的图像可见性属性设置为隐藏 Weblink = NULL **OR** Weblink = "" 使用 MultiDataTrigger,您可以按以下逻辑测试多
有没有人有一个成功的解决方法来根据基础数据对象的属性更改 Silverlight 中的样式,因为当值更改时,样式也会更改。我简要地使用了 WPF,它显然有 DataTrigger,它似乎涵盖了这一点,
【原创】 我有一个 ListBox有它的ItemsSource (这是在创建窗口时在后面的代码中完成的)数据绑定(bind)到 ObservableCollection . ListBox然后有以下D
我正在使用 MVVM,所以我需要绑定(bind)一个矩形形状的属性,该属性最终会对其进行动画处理。 我发现很少solutions并试图复制他们的方法,但故事范围没有发挥作用 我包括我的源代码
我有一个动画可以将边框(使用渲染转换变换)移动到它的宽度。此动画需要应用于多个边框,并且这些边框的宽度会有所不同。所以我将动画关键帧的 Value 属性绑定(bind)到边框的 ActualWidth
我有一个 WPF 数据触发器,该触发器设置为在值为 true 时触发。 我希望每次该值设置为 true 时都会触发此触发器,即使它之前是 true。不幸的是,它似乎只有在值从 true 更改为 fal
我有一个数据模板。它有两种视觉状态——展开、折叠。我添加了 2 个 GoToStateAction-s。第一个在数据上下文属性变为 True 时进入 Expanded 状态,第二个在同一属性变为 Fa
我是一名优秀的程序员,十分优秀!