2014-08-29 64 views
1

嘿計算器communiteWPF列表視圖按鈕來添加行之間的行

我的問題是,我得到了不同的綁定(參見圖一和XAML)和一個ListView當有人點擊了「+」按鈕,一排應該插入在這條帶空白的點擊線之上,或者在這種情況下用00 00 00 00信息(見圖2)。

圖片 一個

http://www11.pic-upload.de/29.08.14/t4481qrginwm.png

圖片上兩個

http://www11.pic-upload.de/29.08.14/jdfys8nijkkb.png

XAML:

<ListView Margin="49,61,0,0" HorizontalAlignment="Left" MaxWidth="600" VerticalAlignment="Top" Name="lvDataBinding" Height="227" Width="402" > 

     <ListView.ItemTemplate> 
      <DataTemplate> 
       <WrapPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding fieldblock_0}" Background="{Binding background_fieldblock_0}" /> 
        <TextBlock Text=" ][ " /> 
        <TextBlock Text="{Binding fieldblock_1}" Background="{Binding background_fieldblock_1}" /> 
        <TextBlock Text=" ][ " /> 
        <TextBlock Text="{Binding fieldblock_2}" Background="{Binding background_fieldblock_2}" /> 
        <TextBlock Text=" ][ " /> 
        <TextBlock Text="{Binding fieldblock_3}" Background="{Binding background_fieldblock_3}" /> 
        <TextBlock Text=" ][ " /> 
        <TextBlock Text="{Binding fieldblock_4}" Background="{Binding background_fieldblock_4}" /> 
        <TextBlock Text=" ]" /> 

        <Button Click = "addrowbutton" Tag="{Binding}" Height="18" >+ </Button> 
       </WrapPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
    </Grid> 

MainWindow.xaml.cs:

public MainWindow() 
    { 
     InitializeComponent(); 
     List<mainpart_compare> items5 = new List<mainpart_compare>(); 
     for (int i = 0; i < 5; i++) 
     { 
      items5.Add(new mainpart_compare() 
         { 
          fieldblock_0 = "00 06 ", 
          fieldblock_1 = "00 06 ", 
          fieldblock_2 = "00 06 ", 
          fieldblock_3 = "00 06 ", 
          fieldblock_4 = "00 06 ", 
          background_fieldblock_0 = "white", 
          background_fieldblock_1 = "white", 
          background_fieldblock_2 = "white", 
          background_fieldblock_3 = "white", 
          background_fieldblock_4 = "white", 
         }); 

     } 
     lvDataBinding.ItemsSource = items5; 
    } 

    public class mainpart_compare 
    { 

     // Goto Field information 
     public string fieldblock_0 { get; set; } 
     public string fieldblock_1 { get; set; } 
     public string fieldblock_2 { get; set; } 
     public string fieldblock_3 { get; set; } 
     public string fieldblock_4 { get; set; } 
     public string background_fieldblock_0 { get; set; } 
     public string background_fieldblock_1 { get; set; } 
     public string background_fieldblock_2 { get; set; } 
     public string background_fieldblock_3 { get; set; } 
     public string background_fieldblock_4 { get; set; } 
    } 

    private void addrowbutton(object sender, RoutedEventArgs e) 
    { 
     // here is the part where i dont know what to do. 

    } 

回答

1

我idead是決定你按排數,然後在這個地方到你的列表中插入。您的商品5是我的列表,儘管我將它創建爲ObservaebleCollection以便反映任何更改。

<ListView ItemsSource="{Binding Lista}" AlternationCount="{Binding Lista.Count}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Width="40" Text="{Binding (ItemsControl.AlternationIndex),RelativeSource={RelativeSource AncestorType=ListViewItem}}"/> 
        <TextBlock Width="40" Text="{Binding }"/> 
        <Button Width="40" Content="+" Command="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=DataContext.Cmd}" 
          CommandParameter="{Binding (ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ListViewItem}}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

    public ObservableCollection<int> Lista { get; set; } 
    private RelayCommand cmd; 
    public RelayCommand Cmd 
    { 
     get { return cmd ?? (cmd = new RelayCommand(new Action<object>(AddRow))); } 
    } 
    public MainWindow() 
    { 
     Lista = new ObservableCollection<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
     InitializeComponent(); 
     this.DataContext = this; 
    } 

    void AddRow(object obj) 
    { 
     int numer; 
     Int32.TryParse(obj.ToString(), out numer); 
     Lista.Insert(numer, 55);   
    } 

我一直插入55查看更改。正常輸出:
enter image description here
第一列是行號,第二列是List中的值。您將擁有您的[00 ...]代替。當我點擊,因爲

Lista.Insert(numer, 55);  


enter image description here

+0

我得到的問題,當我像添加200個項目,按「+」按鈕,在位置150,他從1-200改變號碼的順序150 -201 + 1-150。所以他從一個錯誤的觀點開始......有沒有一種可能的方法來檢查數字順序是否正確,如果不是,他會重建所有東西。 – lacura 2015-01-05 10:05:23

0

THX的回答最後一排我將增加55。 我想修改一下代碼,但不知何故,甚至不顯示我什麼,相反,它顯示了錯誤:

BindingExpression path error: 'Lista' property not found on 'object' ''MainWindow' (Name='')'. BindingExpression:Path=Lista; DataItem='MainWindow' (Name='');

<ListView ItemsSource="{Binding lista}" AlternationCount="{Binding Lista.Count}" Name="TestVIew"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Width="40" Text="{Binding (ItemsControl.AlternationIndex),RelativeSource={RelativeSource AncestorType=ListViewItem}}"/> 
        <TextBlock Width="40" Text="{Binding Text_nr1}"Background="{Binding Text_nr1_background}"/> 
        <TextBlock Width="40" Text="{Binding Text_nr2}" Background="{Binding Text_nr1_background}"/> 

        <Button Width="40" Content="+" Command="{Binding RelativeSource={RelativeSource AncestorType=ListView}, Path=DataContext.Cmd}" 
         CommandParameter="{Binding (ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ListViewItem}}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

現在我想改變的2周不同的TextBlocks (Background="{Binding Text_nr1_background}")背景。

public ObservableCollection<Lista> lista; 
    private RelayCommand cmd; 
    public RelayCommand Cmd 
    { 
     get { return cmd ?? (cmd = new RelayCommand(new Action<object>(AddRow))); } 
    } 
    public MainWindow() 
    { 
     lista = new ObservableCollection<Lista>() { new Lista() { Text_nr1 = "test", Text_nr1_background="green", Text_nr2_background="red",Text_nr2 = "test2" } }; 
     InitializeComponent(); 
     this.DataContext = this; 
    } 

    void AddRow(object obj) 
    { 
     int numer; 
     Int32.TryParse(obj.ToString(), out numer); 
     lista.Insert(numer, new Lista() { Text_nr1 = "test", Text_nr1_background = "green", Text_nr2_background = "red", Text_nr2 = "test2" }); 
    } 

利斯塔類:

public class Lista 
{ 
    public string Text_nr1 { get; set; } 
    public string Text_nr1_background { get; set; } 
    public string Text_nr2 { get; set; } 
    public string Text_nr2_background { get; set; } 
} 
+0

lista必須屬性{get; set;} – Maximus 2014-09-16 14:24:34

相關問題