C# WPF:更改一个更改的数据模板

C# WPF:更改一个更改的数据模板,c#,wpf,datatemplate,edit,C#,Wpf,Datatemplate,Edit,在我的Wpf应用程序中,我有两个数据模板。DefaultDataTemplate和EditableDataTemplate Xaml: 下一行用于将条目过帐到Web帐户- Globals._globalController.harvestManager.postHarvestEntry(item); 请提出一些建议,我应该如何继续?您可以在类Harvest\u Timesheetry中添加一个属性“DirtyFlag”,该属性指示至少一个值已更改 public class Harvest_Ti

在我的Wpf应用程序中,我有两个数据模板。DefaultDataTemplate和EditableDataTemplate

Xaml:

下一行用于将条目过帐到Web帐户-

Globals._globalController.harvestManager.postHarvestEntry(item);

请提出一些建议,我应该如何继续?

您可以在类Harvest\u Timesheetry中添加一个属性“DirtyFlag”,该属性指示至少一个值已更改

public class Harvest_TimeSheetEntry
{
    public bool DirtyFlag {get; private set;}

    public void Reset()
    {
        DirtyFlag = false;
    }

    public DateTime StartValue
    {
        get { return _startValue; }
        set 
        {
            _startValue = value;
            // in each of the modifyable Properties add this
            DirtyFlag = true;
        }
    }

    (...)
}
在按钮事件处理程序中,检查此标志:

private void EditButton_Click(object sender, RoutedEventArgs e)
{
    foreach (Harvest_TimeSheetEntry item in listBox1.Items)
    {
        if (item.isSynced)
        {
            item.Reset();

            item.isSynced = false;
            listBox1.ItemTemplate = (DataTemplate)this.FindResource("EditableDataTemplate");
            this.EditButton.Content = "Done Editing";
        }
        else
        {
            listBox1.ItemTemplate = (DataTemplate)this.FindResource("DefaultDataTemplate");
            this.EditButton.Content = "Edit";
            if(item.DirtyFlag)
            {
                Globals._globalController.harvestManager.postHarvestEntry(item);
                item.Reset();
                System.Windows.MessageBox.Show("Entry posted");
            }
        }
    }
}
public class Harvest_TimeSheetEntry
{
    public bool DirtyFlag {get; private set;}

    public void Reset()
    {
        DirtyFlag = false;
    }

    public DateTime StartValue
    {
        get { return _startValue; }
        set 
        {
            _startValue = value;
            // in each of the modifyable Properties add this
            DirtyFlag = true;
        }
    }

    (...)
}
private void EditButton_Click(object sender, RoutedEventArgs e)
{
    foreach (Harvest_TimeSheetEntry item in listBox1.Items)
    {
        if (item.isSynced)
        {
            item.Reset();

            item.isSynced = false;
            listBox1.ItemTemplate = (DataTemplate)this.FindResource("EditableDataTemplate");
            this.EditButton.Content = "Done Editing";
        }
        else
        {
            listBox1.ItemTemplate = (DataTemplate)this.FindResource("DefaultDataTemplate");
            this.EditButton.Content = "Edit";
            if(item.DirtyFlag)
            {
                Globals._globalController.harvestManager.postHarvestEntry(item);
                item.Reset();
                System.Windows.MessageBox.Show("Entry posted");
            }
        }
    }
}