2016-06-09 61 views
0

我設法在TextBlock中顯示我的數組 - 每個[元素]在單獨的行中,但是我想將每個Array [index]元素放入單獨的TextBlock中,只要它來自同一行,所以:如何爲每個數組元素設置不同的綁定? C#UWP

  1. 文件被訪問
  2. 行進行排序
  3. 線被分成詞
  4. 每行放在單獨的行

5.行中的每個單詞都放入單獨的TextBlock中,但位於同一行中。

這裏是我的代碼:

public async void ReadFile() 
    { 
     var path = @"CPU.xls"; 
     var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; 

     var file = await folder.GetFileAsync(path); 
     var readFile = await Windows.Storage.FileIO.ReadLinesAsync(file); 
     foreach (string line in readFile.OrderBy(line => 
     { 
      int lineNo; 
      var success = int.TryParse(line.Split(';')[4], out lineNo); 
      if (success) return lineNo; 
      return int.MaxValue; 
     })) 
     { 
      string[] splitLines = line.Split(';'); 

      for (int index = 0; index < splitLines.Length; index++) 
      { 
       itemsControl.Items.Add(splitLines[index]); 
      }    
     }  
    } 

正如你可以在上面看到,我已經做了步驟1 - 4,不幸的是,此刻的每一個字進入不同的行。

這是我的XAML文件的更大的一部分:

<ItemsControl x:Name="itemsControl" 
       ItemsSource="{Binding itemsControl}" 
       FontSize="24"> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <Grid Width="Auto" 
          Margin="0 12" 
            HorizontalAlignment="Center"> 
           <Grid.ColumnDefinitions>          
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition Width="Auto" /> 
           </Grid.ColumnDefinitions> 
           <Grid.RowDefinitions> 
            <RowDefinition Height="Auto" />           
           </Grid.RowDefinitions>          
           <StackPanel Grid.Column="0" 
            Grid.Row="0" 
            Orientation="Horizontal"> 
            <TextBlock Text="{Binding }" /> 
           </StackPanel> 
           <StackPanel Grid.Column="1" 
            Grid.Row="0" 
            Orientation="Horizontal"> 
            <TextBlock Text="{Binding }" /> 
           </StackPanel> 
          </Grid> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 

我放了兩個的TextBlocks而不是5現在。如何讓每個人獲得不同的綁定路徑來鏈接不同的數組元素?

---------- ---------- UPDATE我 編輯的TextBlocks所以它們中的每指向不同的數組元素像這樣:

<StackPanel Grid.Column="0" 
      Grid.Row="0" 
      Orientation="Horizontal"> 
      <TextBlock Text="{Binding Path=splitLines[0]}" /> 
</StackPanel> 
<StackPanel Grid.Column="1" 
      Grid.Row="0" 
      Orientation="Horizontal"> 
      <TextBlock Text="{Binding Path=splitLines[1]}" /> 
</StackPanel> 

我不在這一點上沒有任何錯誤,但不幸的是沒有顯示任何數據。爲什麼綁定到數組元素不工作?

+0

在這種情況下,你要好得多建設這個邏輯到您的視圖模型,以及暴露的屬性'List '(或'List ')。然後,您可以將該屬性設置爲ItemsControl的ItemsSource,並按照您的喜好將這些列綁定到這些字段。 – Baldrick

+0

你會如此善良,請提供一些代碼嗎? – paddy

回答

0

你可以做到這一點很容易設置的ItemsControl

編輯 新增ItemTemplateItemsControlItemsPanel

假設您有一個MainPage.xaml

<ItemsControl x:Name="WordsList" 
       ItemsSource="{Binding listOfWords}"> 
    <!-- Ensures each item is displayed horizontally --> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"></StackPanel> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <!--if you want each line in seperate TextBlock with more control--> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <TextBlock Text="{Binding}" FontSize="22" /> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

在後面的代碼MainPage.xaml.cs

public sealed partial class MainPage : Page 
{ 
    //Your intial string 
    string words = "I am Line 1; I am Line 2; I am Line 3"; 

    //Using an ObservableCollection as works well with data binding 
    public ObservableCollection<string> listOfWords { get; set; } = 
     new ObservableCollection<string>(); 

    public MainPage() 
    { 
     this.InitializeComponent(); 

     //set the DataContext to this page 
     this.DataContext = this; 

     Loaded += (s, args) => 
     { 
      var splitWords = words.Split(';'); 
      foreach(var word in splitWords) 
      { 
       //each line is added to listOfWords and can then be accessed by the ItemsControl as the ItemsSource 
       //is set to listOfWords 
       listOfWords.Add(word); 
      }     
     }; 
    } 
} 

EDIT2 綁定到數組,您將需要一個公共財產如

public string[] splitLines { get; set; } 
+0

我得到了這一點,但問題出現時,我想把每行的每個單詞放入單獨的列。 – paddy

+0

我不明白,如果你想通過單詞拆分,那麼你需要改變你的標準來拆分空間空間。 – SWilko

+0

我的C#代碼已經給我每行的每一個字,但我無法綁定到數組[索引] – paddy

相關問題