我有一个这样的树视图模板:
<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
(我将添加到链接列表中)这次是相同的,它会在执行此代码时更改ProductValue
和previous
的属性itemToAdd
:
itemToAdd.ProductValue = previous.ProductValue + 1;
那我应该怎么解决这个问题呢?提前谢谢!
答案 0 :(得分: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
)。