更改WPF DataTemplate以进行一次更改

时间:2013-08-16 10:26:11

标签: c# wpf datatemplate

在我的wpf应用程序中,我为ListBox条目编写了鼠标双击事件。当我双击单个条目时,它将被发布在服务器上。我的问题是,当我将任何条目发布到服务器时,我只想更改该条目的DataTemplate。在我编写的下面的代码中,它将所有条目发布到服务器。所以,请建议仅为单一条目更改DataTemplate的方法。 “Harvest_TimeSheetEntry”是我的ListBox条目。

另见代码中的注释。

C#代码:

    private void listBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
    {
        //Submit clicked Entry
        if (sender is ListBoxItem)
        {
            ListBoxItem item = (ListBoxItem)sender;
            Harvest_TimeSheetEntry entryToPost = (Harvest_TimeSheetEntry)item.DataContext;

            if (!entryToPost.isSynced)
            {
                //Check if something is selected in selectedClientItem and selectedProjectItem For that items
                if (entryToPost.ClientNameBinding == "Select Client" || entryToPost.ProjectNameBinding == "Select Project")
                    System.Windows.MessageBox.Show("Please select your Project and Client");
                else
                {
                    Globals._globalController.harvestManager.postHarvestEntry(entryToPost);
                    System.Windows.MessageBox.Show("Entry posted");
                    DataTemplate tmpl = (DataTemplate)this.FindResource("DefaultDataTemplate");
                    listBox1.ItemTemplate = tmpl;   // **Here I want to change DataTemplate for only posted entry.**
                }
            }
            else
            {

                //Already synced.. Make a noise or something
                System.Windows.MessageBox.Show("Already Synced;TODO Play a Sound Instead");
            }
        }
    } 

1 个答案:

答案 0 :(得分:0)

尝试使用以下行替换您的行:

Harvest_TimeSheetEntry entryToPost = (Harvest_TimeSheetEntry)item.Content;

这将访问ListBoxItem内的数据项。当然,这取决于您如何设置项目的DataContext ...我假设您已设置DataContext的{​​{1}}而不是ListBox.ItemsSource ListBoxItem }。请注意,如果您设置了每个DataContext的{​​{1}},则 可能是您的问题。