sti*_*k81 18 .net data-binding wpf datatrigger
假设我有以下简单类:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class PersonHolder
{
public Person CurrentPerson { get; set; }
public int ActiveId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我有类PersonHolder的实例为栅格DataContext,和在网格我有一个StackPanel被绑定到CurrentPerson的PersonHolder-表示它的数据:
<Grid>
<StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}">
<TextBlock Text="{Binding Id}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
所以-这个问题:我如何给StackPanel在绿色背景CurrentPerson有一个Id匹配ActiveId的的PersonHolder(是的,非常有用的,但是这仅仅是一个非常简单的例子..).我的想法是,这是一个使用触发器的东西,但我可以在触发条件值中使用绑定吗?如果是这样我可以这样做:
<Grid x:Name="Foo">
<StackPanel x:Name="PersonPanel" DataContext="{Binding CurrentPerson}">
<TextBlock Text="{Binding Id}" />
<TextBlock Text="{Binding Name}" />
<StackPanel.Triggers>
<DataTrigger Binding="{Binding Id}" Value="{Binding ElementName=Foo, Path=ActiveId}">
<Setter TargetName="PersonPanel" Property="Background" Value="Green" />
</DataTrigger>
</StackPanel.Triggers>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我怎么解决这个问题?
cod*_*oop 35
您不能在Value属性上使用绑定,但可以使用MultiBinding和IMultiValueConverter来解决这个问题.我会Trigger在一个Style例如Window.Resources中定义我,它会给出这样的东西:
<Window.Resources>
<local:SomeMultiConverter x:Key="someMultiConverter" />
<Style x:Key="someStyle" TargetType="StackPanel">
<Setter Property="StackPanel.Background" Value="Red" />
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource someMultiConverter}">
<Binding Path="Id"></Binding>
<Binding ElementName="Foo" Path="DataContext.ActiveId"></Binding>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="StackPanel.Background" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid x:Name="Foo">
<StackPanel DataContext="{Binding CurrentPerson}" Style="{StaticResource someStyle}" >
<TextBlock Text="{Binding Id}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
有关和的示例,请参阅此链接.他们写起来相当容易.MultiBindingIMultiValueConverter
| 归档时间: |
|
| 查看次数: |
19324 次 |
| 最近记录: |