gpt4 book ai didi

wpf - 数据触发器绑定(bind)问题(使用 Int 和 Enum)

转载 作者:行者123 更新时间:2023-12-02 22:29:53 25 4
gpt4 key购买 nike

全部-

需要对这个问题有一些了解。我创建了一个示例项目来隔离我的一个项目中的问题。我正在尝试根据模型中的某个值(Int/String/Enum)设置我的边框背景。

我遇到的问题是:

1) 我相信正在设置 DataTrigger 绑定(bind)中的源 - 但我仍然收到此错误:在“对象”“字符串”上找不到 personId 属性。绑定(bind)表达式:Path=personId; DataItem='String' (HashCode=1896530089);目标元素是 'Border' (Name='');目标属性是“NoTarget”(类型“Object”)

2) 我在 int(或字符串)上这样做只是为了让这个概念起作用。但实际上,我需要将其作为 Enum 值。对此的任何建议也会有所帮助。

代码片段如下:

Person.cs

public class Person
{
public int personId { get; set; }
public string personName { get; set; }
public Gender personType { get; set; }

public enum Gender
{
Male,
Female
}
}

PersonViewModel.cs

public class PersonViewModel
{
private ObservableCollection<Person> _people;

public ObservableCollection<Person> people
{
get
{
return _people;
}
}

public PersonViewModel()
{
_people = new ObservableCollection<Person>()
{
new Person()
{
personId = 1,
personName = "John",
personType = Person.Gender.Male
},

new Person()
{
personId = 1,
personName = "Mary",
personType = Person.Gender.Female
},
};
}
}

PersonView.xaml.cs

public PersonView()
{
InitializeComponent();
var personvm = new PersonViewModel();
DataContext = personvm;
}

PersonView.xaml

 <Window.Resources>
<Style x:Key="BorderGradient" TargetType="{x:Type Border}">
<Style.Triggers>
<DataTrigger Binding="{Binding Source=people, Path=personId}" Value="1">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.511,0.957">
<GradientStop Color="LightGray" Offset="0.55" />
<GradientStop Color="Black" Offset="1.3" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Source=people, Path=personId}" Value="2">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.511,0.957">
<GradientStop Color="LightGray" Offset="0.55" />
<GradientStop Color="Yellow" Offset="1.3" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>

<Border CornerRadius="15,15,15,15" Style="{StaticResource BorderGradient}" >
<Grid Width="Auto" MinWidth="750" Height="Auto" MinHeight="600">

<!-- Logic in VM where visibility would be set through VM -->

<StackPanel Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Top" Visibility="To be set" >
<loc:MaleView/>
</StackPanel>

<StackPanel Grid.Row="1" HorizontalAlignment="Center" Visibility=" to be set">
<loc:FemaleView />
</StackPanel>
</Grid>
</Border>

enter image description here

最佳答案

people 是一个可观察的集合,它是您在数据触发器中绑定(bind)的对象。 ObservableCollection 没有名为“personId”的属性。

为您的 PersonViewModel 使用 DataTemplate 可能会更好

<DataTemplate DataType={x:Type vm:PersonViewModel}">

<Grid Background="Red">
.. Template For PersonViewModel Here ..
</Grid>

<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Path=personId}" Value="1">
.... do stuff
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>

关于wpf - 数据触发器绑定(bind)问题(使用 Int 和 Enum),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12462106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com