2013-10-04 81 views
0

我是新來的,所以忍受着我。綁定到ItemTemplate裏面的Viewmodel集合

我有一個viewmodel和一個ItemsControl的視圖,其中已經有一些數據,它有自己的項目源。

但是我實際上想要在控件中編號,因爲總是有10個。我可以通過在左側添加一些文本塊來實現這一點,但這只是單調乏味,我試圖找到一種不同的方式。

所以這是什麼,我至今要點:

<ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition /> 
           <ColumnDefinition /> 
           <ColumnDefinition /> 
          </Grid.ColumnDefinitions> 
          <TextBlock Grid.Column="0" Text="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=DataContext.Nums}" /> 
          <TextBlock Grid.Column="1" Text="{Binding Item1}" /> 
          <TextBlock Grid.Column="2" Text="{Binding Item2}" /> 
         </Grid> 
        </StackPanel> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 

我的問題是,它只是顯示相同的項目爲每一個在這種情況下是「(集合)」自然是因爲我有一個1-10的列表屬性。

綁定到這個在一個單獨的.cs文件:

private List<int> _nums = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 

public List<int> Nums 
{ 
    get { return _nums; } 
} 

編輯:

所以我找到了一個解決方案通過使這是一個字符串的ItemsSource內一個新的屬性,然後用一些我的應用程序收集源數據的方式搖擺不定,我能夠始終如一地工作。

我仍然感興趣,如果這種方法可以工作,但我認爲它會少得多的工作。

+0

你可以顯示你綁定的類的結構嗎? –

+0

實際的itemsource是從我的viewmodel中的一個屬性,基本上我只是試圖使用第二個屬性作爲源? – pgwri

+0

TextBlock不支持模板(以您引用它的方式)。基於你寫的內容,直接的建議是用MyUserControl替換第一個TextBlock。 –

回答

0

到目前爲止,在我看來,最容易做的事情,就是單純的int財產在你ItemTemplate直接添加到您的數據類型或數據視圖模型類,然後Bind到:

<DataTemplate> 
    <StackPanel Orientation="Horizontal"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
       <ColumnDefinition /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Grid.Column="0" Text="{Binding Number}" /> 
      <TextBlock Grid.Column="1" Text="{Binding Item1}" /> 
      <TextBlock Grid.Column="2" Text="{Binding Item2}" /> 
     </Grid> 
    </StackPanel> 
</DataTemplate> 

在WPF ,我們通常會嘗試爲每個視圖創建一個視圖模型類,該視圖的所有我們需要在其中顯示數據。

UPDATE >>>

忽略,可能會或可能不會與數據的數字...只是增加一個int Number財產,離開的時候,你用數據填充其他屬性設置爲0。將數據傳遞給視圖模型時,只需遍歷它,並正確編號即可。假設你的集合被命名爲Items,你可以這樣做:

for (int index = 1; index < Items.Count; index++) 
{ 
    Items[index - 1].Number = index; 
} 
+0

由於我使用的數據的性質,這對我來說很困難。原本就是這樣。我正在導入有數字的文件,但在某些情況下,文件只有2到6的說法,而最後我列出了10個空插槽有0的字符串,我試着將它們轉換爲字符/字符串,所以我可以有一個空格而不是0,但是我繼續嘗試這種方式。基本上我只是學習/嘗試不同的選擇,我只是想知道是否有可能做到這一點 – pgwri