0

我有一个名为 Name1 和 Name2 的两个属性。

我如何检查这两个属性是否具有相同的值,即不使用 XAML 中的数据触发器。

Name1 属性在 Class1 中,而 Name2 属性在 Class2 中。

更详细地说,

  1. 我有一个名为 Pages 的类,它具有属性 Name1。在应用程序加载时,我将创建一个 List 对象并向该列表添加一些值。在 XAML 中,我会将它绑定到 ItemSource。

  2. 我有另一个名为 CurrentPage 的类,它再次具有名为 Name2 的属性。

  3. 在 ItemSource.ItemTemplate 中,我添加了一个标签控件来显示所有 Pages 的名称。

    <ItemsControl ItemsSource="{Binding Pages}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
          <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,2,0,2"></StackPanel>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
       <DataTemplate>                                  
           <Label Content="{Binding Name1}" FontSize="15" FontFamily="Arial" FontWeight="DemiBold">
           <Label.Style>
              <Style TargetType="Label">
                  <Setter Property="Template">
                      <Setter.Value>
                         <ControlTemplate TargetType="Label">
                          <Border Name="Border"  HorizontalAlignment="Center" BorderBrush="Black" BorderThickness="1" CornerRadius="0,20,20,0" Width="100">
                          <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
                           </Border>
                          <ControlTemplate.Triggers>
                          <DataTrigger Binding="{Binding CurrentPage.Name2}" Value="Name1">
                               <Setter Property="Background" TargetName="Border" Value="Yellow"></Setter>
                          </DataTrigger>
                          </ControlTemplate.Triggers>
                          </ControlTemplate>
                          </Setter.Value>
                           </Setter>
               </Style>
              </Label.Style>
            </Label>
         </DataTemplate>
     </ItemsControl.ItemTemplate>
    

  4. 如果标签的 BG 颜色等于当前页面内容,我正在尝试更改它。

但是我收到错误并且样式没有加载。我知道我在比较 Name2 和 Name1 的部分是错误的..() 请任何人帮助我

4

3 回答 3

1

或者,您可以使用转换器在属性 Name1 和 Name2 中使用多重绑定来比较值:

class StringMatchConverter : IMultiValueConverter
{
    public object Convert(object [] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

        if(values.Length < 2)
        {
            return false;
        }

        for (int i = 1; i < values.Length; i++)
        {
                if (!(values[0] as string).Equals(values[i] as string))
                {
                    return false;
                }
        }

        return true;

    }

    public object[] ConvertBack(object value, Type[] targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

然后你可以在这些行中写一些东西:

 <MultiBinding Converter="{StaticResource StringMatchConverter}">
                        <Binding Path="Name1"/>
                        <Binding XPath="Name2" />
                    </MultiBinding>
于 2015-08-10T16:01:13.510 回答
0

在我看来这是业务逻辑,在这种情况下,这应该在Model中处理:

public bool AreTheSame
{
    get { return Name1 == Name2; }
}

然后,您可以绑定到AreTheSame您的DataTrigger.

于 2015-08-10T11:17:17.243 回答
0
<Label.Style>
                                                <Style TargetType="Label">
                                                    <Setter Property="Template">
                                                        <Setter.Value>
                                                            <ControlTemplate TargetType="Label">
                                                                <Border Name="Border"  HorizontalAlignment="Center" BorderBrush="Black" BorderThickness="1" CornerRadius="0,20,20,0" Width="150">
                                                                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"></ContentPresenter>
                                                                </Border>
                                                                <ControlTemplate.Triggers>
                                                                    <DataTrigger>
                                                                        <DataTrigger.Binding>
                                                                            <MultiBinding Converter="{StaticResource StringMatchConverter}">
                                                                                <Binding Path= "CurrentPage.Name2"/>
                                                                                <Binding Path="Name1" />
                                                                            </MultiBinding>
                                                                        </DataTrigger.Binding>
                                                                        <Setter Property="Background" TargetName="Border" Value="Yellow"></Setter>
                                                                    </DataTrigger>
                                                                </ControlTemplate.Triggers>
                                                            </ControlTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </Style>
                                            </Label.Style>
于 2015-08-11T06:29:25.057 回答