- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UserControl
( FahrtControl.xaml
) 与 ListView
.这个UserControl
绑定(bind)到 ItemsControl
在我的MainWindow.xaml
. MainWindow
有自己的 ViewModel 和 FahrtControl
有自己的 ViewModel。我现在想绑定(bind)Listview
的背景项目到 Brush
FahrtControl
的 ViewModel 中的属性.
以下是我的代码的相关部分:
MainWindow.xaml:
<Window x:Class="WpfFrontend.Forms.Main.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfFrontend.Forms.Main"
xmlns:fahrtControl="clr-namespace:WpfFrontend.Controls.FahrtControl"
mc:Ignorable="d">
<Window.DataContext>
<local:MainViewModel />
</Window.DataContext>
<Window.Resources>
<DataTemplate DataType="{x:Type fahrtControl:FahrtControlViewModel}">
<fahrtControl:FahrtControl />
</DataTemplate>
</Window.Resources>
<ItemsControl ItemsSource="{Binding Fahrten, UpdateSourceTrigger=PropertyChanged}" />
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Windows.Controls;
using System.Windows.Media;
using Backend;
using DatabaseCommunication;
using WpfFrontend.Annotations;
using WpfFrontend.Controls.FahrtControl;
namespace WpfFrontend.Forms.Main
{
public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel ()
{
SyncFahrten ();
}
private void SyncFahrten ()
{
var fahrtenPromise =
MainUtility.GetFahrtenToRangeAsync (GlobalProperties.Start, GlobalProperties.Start.AddDays (6));
fahrtenPromise.Task.GetAwaiter ().OnCompleted (() =>
{
AddFahrten (fahrtenPromise.Task.Result);
});
}
private void AddFahrten (List <ExtendedFahrt> fahrten)
{
foreach (var fahrtControlViewModel in
fahrten.Select (fahrt =>
{
return new FahrtControlViewModel (
Brushes.Red, Brushes.Red, Brushes.White,
fahrt.Ort,
new ObservableCollection <string>
{
fahrt.Bemerkung
}, new ObservableCollection <KundeDisplay> (fahrt.Kunden));
}))
Fahrten.Add (fahrtControlViewModel);
OnPropertyChanged ("");
}
private ObservableCollection <FahrtControlViewModel> _fahrten =
new ObservableCollection <FahrtControlViewModel> ();
public ObservableCollection <FahrtControlViewModel> Fahrten
{
get => _fahrten;
set
{
if (Equals (value, _fahrten))
return;
_fahrten = value;
OnPropertyChanged ();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) =>
PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
}
}
<UserControl x:Class="WpfFrontend.Controls.FahrtControl.FahrtControl"
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:local="clr-namespace:WpfFrontend.Controls.FahrtControl"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="HeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</UserControl.Resources>
<ListView ItemsSource="{Binding Kunden}"
Background="{Binding KundenBrush, UpdateSourceTrigger=PropertyChanged}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Background" Value="{Binding DataContext.KundenBrush}" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource HeaderStyle}">
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
</GridView>
</ListView.View>
</ListView>
</UserControl>
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Media;
using Backend;
using WpfFrontend.Annotations;
using WpfFrontend.Misc;
namespace WpfFrontend.Controls.FahrtControl
{
public class FahrtControlViewModel : INotifyPropertyChanged
{
private Brush _kundenBrush = Brushes.Red;
private ObservableCollection <KundeDisplay> _kunden;
/// <inheritdoc />
public FahrtControlViewModel (
Brush kundenBrush,
ObservableCollection <KundeDisplay> kunden)
{
Kunden = kunden;
KundenBrush = kundenBrush;
}
public Brush KundenBrush
{
get => _kundenBrush;
set
{
if (value.Equals (_kundenBrush))
return;
_kundenBrush = value;
KundenDark = _kundenBrush.IsDark ();
OnPropertyChanged ();
}
}
public ObservableCollection <KundeDisplay> Kunden
{
get => _kunden;
set
{
if (Equals (value, _kunden))
return;
_kunden = value;
OnPropertyChanged ();
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) =>
PropertyChanged?.Invoke (this, new PropertyChangedEventArgs (propertyName));
}
}
UserControl
中工作。 ,所以它必须与样式标签有关,不是吗?
最佳答案
DataContext
的 ListView.ItemContainerStyle
与 ListView
不一样的。您可以使用其元素名称找到正确的数据上下文:
<UserControl x:Class="WpfFrontend.Controls.FahrtControl.FahrtControl"
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:local="clr-namespace:WpfFrontend.Controls.FahrtControl"
mc:Ignorable="d"
<!-- -->
x:Name="root"
<!-- -->
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="HeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</UserControl.Resources>
<ListView ItemsSource="{Binding Kunden}"
Background="{Binding KundenBrush, UpdateSourceTrigger=PropertyChanged}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<!-- -->
<Setter Property="Background" Value="{Binding ElementName=root, Path=DataContext.KundenBrush}" />
<!-- -->
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource HeaderStyle}">
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
</GridView>
</ListView.View>
</ListView>
</UserControl>
<UserControl x:Class="WpfFrontend.Controls.FahrtControl.FahrtControl"
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:local="clr-namespace:WpfFrontend.Controls.FahrtControl"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
<Style x:Key="HeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</UserControl.Resources>
<ListView ItemsSource="{Binding Kunden}"
Background="{Binding KundenBrush, UpdateSourceTrigger=PropertyChanged}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<!-- -->
<Setter Property="Background" Value="{Binding RelativeSource={RelativeSource AncestorType=FahrtControl}, Path=DataContext.KundenBrush}" />
<!-- -->
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource HeaderStyle}">
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name" />
</GridView>
</ListView.View>
</ListView>
</UserControl>
关于c# - WPF 绑定(bind) ListView ItemContainerStyle 的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50593968/
我有一个 ListView,其中行交替颜色:
我创建了用作 ListView 项目模板的样式,其中包含一个 CheckBox 和一个 TextBlock:
我正在 VS 2012 中使用 XAML/WPF。我承认我还不太了解模板和样式。 我在 application.xaml 文件中定义了一个样式,如下所示: 现在我想将此样式应用于我的 L
我创建了以下菜单。现在我想在不同的窗口上使用相同的菜单布局,并考虑将下面的代码转移到 Generic.xaml 并只在需要时引用它。最好的方法是什么,以便实际使用时间尽可能短?
我正在尝试使用以下 xaml 将一个 RibbonGroup 和几个 RibbonButton 绑定(bind)到我的 View 模型: 这给了我以下错
我正在尝试将 ItemTemplate 和 ItemContainerStyle 应用于 ItemsControl:- 然而 ItemContainerStyle 似乎被忽略了(但如果我删除了 It
我尝试使用 TreeView 显示分层数据,并且我想为不同的子类型设置不同的 DataTemplates。 但问题是,我的风格没有得到应用。 也许这是一个非常简单的错误,但我真的没有找到它。
只是一个简短的问题。我可以同时使用 ListView.Resources 和 ListView.ItemContainerStyle 吗?如果我一起使用,似乎只有其中一个在工作..
已经使用方法为TreeViewItems设置了一个fullrowselect这里:Lee Campbell horizontal stretch for treeviewitems 这适用于顶级项目。
例如,有没有办法防止 ItemContainerStyle 覆盖已经设置的样式(通过 )? MenuItem 的样式已在 ResourceDictionary 中定义XAML 文件,在应用程序启动时加
我在从 TabControl 的 ItemContainerStyle 中的默认样式继承时遇到问题。 目的是继承主题风格,只改变一些属性。 如果我编写此 XAML 代码,则使用默认的 TabItem
我正在按照此处绑定(bind) MenuItem 的示例进行操作。到数据对象。
我已经看到了一些其他 Silverlight 'vs' 的问题,但找不到这个特定比赛的任何问题。 我正在尝试定义我的对象绑定(bind)到 ListBox 的方式将显示。我定义了 DataTempla
以下类似于我要完成的工作。但是,我得到了错误 Invalid PropertyDescriptor value. 在模板上 Setter .我怀疑这是因为我没有指定 TargetType对于Style
我有以下样式和列表框:
我有两个列表框,默认的和自定义的。一个正确使用 DataTemplateSelector 而另一个只使用默认的 DataTemplates 从不调用选择器; //shows correctly //
我的窗口的 DataContext 是一个 IDictionary>。 任何人都可以向我解释为什么这工作正常: 但这不是:
我正在尝试将集合绑定(bind)到 ItemsControl,将 Canvas 作为项目面板,并将每个项目的 Canvas.Left 和 Top 绑定(bind)到项目对象的属性。基本上我正在尝试重新
我正在尝试将集合绑定(bind)到 ItemsControl,将 Canvas 作为项目面板,并将每个项目的 Canvas.Left 和 Top 绑定(bind)到项目对象的属性。基本上我正在尝试重新
我有一个 UserControl ( FahrtControl.xaml ) 与 ListView .这个UserControl绑定(bind)到 ItemsControl在我的MainWindow.
我是一名优秀的程序员,十分优秀!