2017-09-15 178 views
0

的財產我有一個樹視圖模板這樣的:更改樹視圖中選擇項目

<HierarchicalDataTemplate DataType="{x:Type data:Category}" ItemsSource="{Binding Path=Products}"> 
    <TextBlock Text="{Binding Path=CategoryName}"/> 
</HierarchicalDataTemplate> 
<HierarchicalDataTemplate DataType="{x:Type data:Product}"> 
    <StackPanel> 
     <StackPanel.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Add To Project" Click="MenuItem_OnClick"/> 
      </ContextMenu> 
     </StackPanel.ContextMenu> 
     <TextBlock Text="{Binding Path=ModelName}" /> 
    </StackPanel> 
</HierarchicalDataTemplate> 

,我試圖到TreeView項目添加到鏈表:當我運行上面的

LinkedList<Product> dll = new LinkedList<Product>(); 
private void MenuItem_OnClick(object sender, RoutedEventArgs e) 
{ 
    var itemToAdd = this.tv_Project.SelectedItem as Product; 
    Product previous = dll.ElementAt(dll.Count - 1); 

    if(itemToAdd.CategoryID == 1) 
    { 
      dll.AddLast(ItemToAdd); 
    } 
    else if(itemToAdd.CategoryID == 2) 
    { 
      itemToAdd.ProductValue = previous.ProductValue + 1; 
    } 
    ... 
} 

現在代碼,我發現如果previous(我上次添加到鏈表)和itemToAdd(我將添加到鏈表的這一次)是相同的,它會更改previousitemToAdd的屬性ProductValue,此時t他的代碼執行:

itemToAdd.ProductValue = previous.ProductValue + 1; 

那麼我應該如何解決這個問題?提前致謝!

+0

LinkedList包含*引用*到產品對象。因此,如果兩個引用引用同一個對象,則可以使用這些引用中的任何一個來更改此對象。 – mm8

+0

@ mm8感謝您的回覆。我相信是這樣。我也試過'Array',它有同樣的問題。那麼,如果我想實現這個目標,我該怎麼辦? – user8595258

+0

我不明白你的代碼應該做什麼以及你試圖完成什麼。而使用數組而不是LinkedList完全沒有區別。你仍然存儲引用。 – mm8

回答

0

LinkedList<T>包含參考Product對象。因此,如果兩個引用引用同一個對象,則可以使用這些引用中的任何一個來更改此對象。

你可能想嘗試副本的產品添加到LinkedList<T>

/* create a new Product object here and set all of its properties: */ 
ddl.AddLast(new Product() { Name = ItemsToAdd.Name }); 

您可能還需要對引用類型在.NET中是如何工作的閱讀起來。

而且在參考和值類型之間的差異:

What is the difference between a reference type and value type in c#?

根據您的要求,您可能要定義Product爲值類型(struct)。

相關問題