2016-01-10 3 views
0

Я пытаюсь связать имя с запятыми. В последнем пункте я не хочу добавлять запятую. Не могли бы вы сообщить мне, как удалить последнюю запятую в приложении WinRT?ItemsControl разделенные запятыми значения в приложении UWP

<ItemsControl ItemsSource="{Binding xxxx}" > 
          <ItemsControl.ItemsPanel> 
           <ItemsPanelTemplate> 
            <StackPanel Orientation="Horizontal"></StackPanel> 
           </ItemsPanelTemplate> 
          </ItemsControl.ItemsPanel> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <StackPanel Orientation="Horizontal" Margin="0,-6,0,0" >  
             <HyperlinkButton x:Name="name" Content="{Binding Name}" VerticalAlignment="Top" Style="{ThemeResource TileContentHyperlinkStyle}" ></HyperlinkButton> 
             <TextBlock x:Name="Comma" x:Uid="/Resources/Comma" Style="{ThemeResource TileContentStyle}" VerticalAlignment="Center" Margin="0,0,5,0" /> 
            </StackPanel> 
          </DataTemplate> 
          </ItemsControl.ItemTemplate> 

Пример вывода:

Ramesh ,Sutha,Nikhil, < === (необходимо удалить последнюю запятую)

+0

Используйте IValueConverter для форматирования данных для отображения. https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.data.ivalueconverter?f=255&MSPPError=-2147217396 –

ответ

0

Вы можете добавить флаг в вашей модели представления для определения того, чтобы показать запятую. Например:

В MyViewModel, добавьте IsLast свойство в качестве флага:

public class MyViewModel 
{ 
    public string Name { get; set; } 

    public bool IsLast { get; set; } = false; 
} 

Затем в XAML, привязать Visibility свойство TextBlock в IsLast:

<ItemsControl ItemsSource="{Binding }"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Margin="0,-6,0,0" Orientation="Horizontal"> 
       <HyperlinkButton x:Name="suspectname" 
           VerticalAlignment="Top" 
           Content="{Binding Name}" 
           Style="{ThemeResource IncidentSmallTileContentHyperlinkStyle}" /> 
       <TextBlock x:Uid="/Resources/Comma" 
          x:Name="Comma" 
          Margin="0,0,5,0" 
          VerticalAlignment="Center" 
          Style="{ThemeResource IncidentSmallTileContentStyle}" 
          Visibility="{Binding IsLast, 
               Converter={StaticResource MyVisibilityConverter}}" /> 
      </StackPanel> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Здесь нам нужно Converter для преобразования bool в Visibility:

public class MyVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     var isLast = (bool)value; 
     if (isLast) 
     { 
      return Visibility.Collapsed; 
     } 
     else 
     { 
      return Visibility.Visible; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     throw new NotImplementedException(); 
    } 
} 

После этого, мы можем добавить некоторые данные, чтобы тест:

public MainPage() 
{ 
    this.InitializeComponent(); 

    List<MyViewModel> MyList = new List<MyViewModel>() { 
     new MyViewModel() { Name = "Ramesh" }, 
     new MyViewModel() { Name = "Sutha" }, 
     new MyViewModel() { Name = "Nikhil", IsLast = true } 
    }; 
    this.DataContext = MyList; 
} 

Update:

Добавление флаг запятой в ViewModel не хороший подход. Использование селектора шаблонов данных для переключения между шаблоном с запятой и без нее может быть лучшим способом.

Чтобы сделать это, нам нужны два шаблона первым, шаблон для первого элемента не должен быть запятой, и другие нуждаются в запятая:

<DataTemplate x:Key="CommonDataTemplate"> 
    <StackPanel Margin="0,-6,0,0" Orientation="Horizontal"> 
     <TextBlock x:Name="Comma" 
        Margin="0,0,5,0" 
        VerticalAlignment="Center" 
        Text="," /> 
     <HyperlinkButton x:Name="suspectname" 
         VerticalAlignment="Top" 
         Content="{Binding Name}" /> 
    </StackPanel> 
</DataTemplate> 
<DataTemplate x:Key="FirstDataTemplate"> 
    <StackPanel Margin="0,-6,0,0" Orientation="Horizontal"> 
     <HyperlinkButton x:Name="suspectname" 
         VerticalAlignment="Top" 
         Content="{Binding Name}" /> 
    </StackPanel> 
</DataTemplate> 

Затем нам нужно создать класс выбора шаблона данных, который наследуется от DataTemplateSelector class и переопределить SelectTemplateCore method для реализации логики. В методе, мы можем использовать ItemsControl.ItemsControlFromItemContainer method, чтобы получить ItemsControl и ItemsControl.IndexFromContainer method, чтобы получить индекс контейнера затем обнаружить элемент, является ли первый элемент в ItemsControl, сравнивая индекс:

public class MyTemplateSelector : DataTemplateSelector 
{ 
    public DataTemplate CommonTemplate { get; set; } 
    public DataTemplate FirstTemplate { get; set; } 

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
    { 
     var itemsControl = ItemsControl.ItemsControlFromItemContainer(container); 
     if (itemsControl.IndexFromContainer(container) == 0) 
     { 
      return FirstTemplate; 
     } 
     return CommonTemplate; 

    } 
} 

После этого можно добавить MyTemplateSelector в Page.Resources как следующее:

<local:MyTemplateSelector x:Key="MyTemplateSelector" 
          CommonTemplate="{StaticResource CommonDataTemplate}" 
          FirstTemplate="{StaticResource FirstDataTemplate}" /> 

Тогда мы можем использовать его в ItemsControl:

<ItemsControl ItemTemplateSelector="{StaticResource MyTemplateSelector}" ItemsSource="{Binding }"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+0

Спасибо, jay ... Я следил за тем же. на данный момент –

+0

@SuthaharJ: Добавление флага для запятой в viewmodel не является хорошим подходом. Я обновил свой ответ и использовал селектор шаблонов данных для переключения между шаблоном с запятой и без нее. При таком подходе нам не нужно менять режим просмотра, вы можете проверить. –

Смежные вопросы