2010-09-30 47 views
2

我一直在WPF中使用ItemsControl来保持安静。我正在使用MVVM来开发我的应用程序。WPF datatemplate ItemsControl指定初始值和最终值

现在我遇到了一个问题。我有一个要求,根据IList <>中的值的数量,我必须显示用逗号分隔的文本框的数量。我编写了一个ItemsControl,它遍历绑定的IList并根据元素数显示文本框。

我已经写了一个DataTemplate这样

<DataTemplate x:Key="ParameterDisplay1"> 
    <ItemsControl ItemsSource="{Binding Parameters}"> 
     <ItemsControl.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"></StackPanel> 
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal" > 
        <TextBox Width="40" Height="auto" Margin="2" Text="{Binding ProcessData}"></TextBox> 
        <TextBlock Text=" , " Width="auto" Height="auto" Margin="2" FontSize="15"></TextBlock> 
       </StackPanel> 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</DataTemplate> 

,我使用它是这样的:

<dg:DataGrid x:Name="DataGrid_Standard" toGenerateColumns="False"> 
    <dg:DataGrid.Columns> 
     <dg:DataGridTemplateColumn Header="Parameters" Width="SizeToCells" IsReadOnly="True" 
      CellTemplateSelector="{StaticResource paramTemplateSelector}"> 
     </dg:DataGridTemplateColumn> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 

但问题是,我必须显示“(”前第一TextBox和一个“)”之后的最后一个TextBox和“,”之间的文本框。
我一定要显示这样的事情::::>     **(文本框,文本框,文本框)**

实现这一使用代码隐藏是容易的,但我不想在我的代码隐藏文件中写入任何东西,我希望我的视图干净。我只想将所有内容写入XAML文件中有关如何执行此操作的示例插图将非常有用!

回答

5

使用某种控件将ItemsEnroll放置在任一侧(可能是停靠面板)。

然后,在项目之前显示的项目模板中输入一个逗号。使用类型为'previous data'的相对来源的数据触发器,以便当前一个项目为null时,隐藏逗号(这样您将看不到第一个项目的逗号)。

编辑

下面是一些代码,显示我的意思。我没有你的数据类型或网格组件,所以它可能不完全正确。它突出了我提到的技术,但是。

<DataTemplate x:Key="ParameterDisplay1"> 
    <StackPanel Orientation="Horizontal"> 
    <TextBlock>(</TextBlock> 
    <ItemsControl ItemsSource="{Binding Parameters}"> 
     <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"></StackPanel> 
     </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 
     <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" > 
      <TextBlock Text=", " Name="Comma"></TextBlock> 
      <TextBox Width="40" Text="{Binding ProcessData}"></TextBox> 
      </StackPanel> 
      <!-- Make a trigger that hides the comma for the first item --> 
      <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}"> 
       <Setter TargetName="Comma" Property="Visibility" Value="Collapsed" /> 
      </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
    <TextBlock>)</TextBlock> 
    </StackPanel> 
</DataTemplate> 
+0

谢谢德鲁,但我很遗憾地说我没有得到你。我应该在哪里包装ItemsControl,并且应该在哪里放置触发器。我已经在我的问题中添加了更多细节,关于我如何使用它.. – GuruC 2010-09-30 03:43:42

+1

@Guru,我用一些代码更新了我的答案。希望更清楚。 – 2010-10-03 18:13:33

+0

Yipiie非常感谢!它的工作精湛。我花了这么多小时的时间...再一次感谢你! – GuruC 2010-10-04 05:11:10