0

我需要根据一个对象的值有条件地更改 TextBlock 绑定,该对象是我的 ViewModel 中 OC 中的众多对象之一。我确定我需要使用 DataTriggers 来完成此操作。具体来说,我想动态更改下面第一个 TexBlock 为其 Text 属性绑定的属性。OC 摘要包含一组名称对象,每个对象都有一个名为 NameType 的属性。如果 NameType = 1 我想绑定到 Name1,NameType=2 绑定到 Name2 等。第二个 TextBlock 很好,因为它显示了关联的值。

 <ItemsControl Grid.Row="1" ItemsSource="{Binding Summary}" Margin="0,3,0,0">
   <ItemsControl.ItemTemplate>
       <DataTemplate>
           <Grid>
             <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
             </Grid.RowDefinitions>
             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="Auto" />
                 <ColumnDefinition />
                 <ColumnDefinition Width="Auto" />
             </Grid.ColumnDefinitions>
              <TextBlock Style="{StaticResource TooltipLeftColumnTextStyle}" Text="{Binding Name}" /> 
               <TextBlock Style="{StaticResource TooltipRightColumnTextStyle}" Text="{Binding Value}" />
               <Border Grid.Row="1" Style="{StaticResource TooltipSeparatorBorder}" />
               <Border Grid.Row="2" Style="{StaticResource TooltipSeparatorAlternateBorder}" />
           </Grid>
          </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
4

2 回答 2

1

这样的事情可能对你有用:

 <ItemsControl Grid.Row="1" ItemsSource="{Binding Summary}" Margin="0,3,0,0">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                            <TextBlock x:Name="TheTextBlock" Style="{StaticResource TooltipLeftColumnTextStyle}" Text="{Binding Name}" />
                            <TextBlock Style="{StaticResource TooltipRightColumnTextStyle}" Text="{Binding Value}" />
                            <Border Grid.Row="1" Style="{StaticResource TooltipSeparatorBorder}" />
                            <Border Grid.Row="2" Style="{StaticResource TooltipSeparatorAlternateBorder}" />
                        </Grid>
                    <DataTemplate.Triggers>
                        <DataTrigger Binding="{Binding NameType}" Value="1">
                            <Setter TargetName="TheTextBlock" Property="Text"  Value="{Binding Name1}"/>
                        </DataTrigger>
                            <DataTrigger Binding="{Binding NameType}" Value="2">
                                <Setter TargetName="TheTextBlock" Property="Text"  Value="{Binding Name2}"/>
                            </DataTrigger>
                        </DataTemplate.Triggers>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>

否则,另一种选择是控制 ViewModel 中绑定的 Name 的值,以便 Name 返回您想要的值。当 NameType 更改时,您将在视图模型上使用参数“Name”引发 PropertyChanged 事件,以便 UI 了解文本更改。

于 2013-08-21T15:59:32.530 回答
0

您正在寻找的是一个 DataTemplateSelector,这将允许您根据传入的对象(或该对象的属性)的值换出模板。

网上有很多比我可以在这里给出的更好的例子,但这应该让你开始..

http://tech.pro/tutorial/807/wpf-tutorial-how-to-use-a-datatemplateselector http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx http://breakdotnet.blogspot.co.uk/2012/05/data-template-selector-in-xaml.html

于 2013-08-21T15:53:07.147 回答