DataContext 覆盖分配的公共变量

问题描述 投票:0回答:1

我目前正在使用 .NET 6 WPF,并使用自定义类并分配为 DataContext 时出现一些奇怪的行为。

我的代码如下所示:

public partial class EditImage : Window
{
    public bool closed = false;

    customclass defaultvalue = new customclass();
    public EditImage(customclass inputvalue)
    {
        InitializeComponent();

        // assign Datacontext
        this.DataContext = inputvalue;
        defaultvalue = inputvalue;
    }

    // checking CheckBox with Binding to Office variable and clicking save-button


    private void btn_Save_Click(object sender, RoutedEventArgs e)
    {
        var editedvalue = this.DataContext as customclass;

        // If changes made in Window, something should be executed
        if ((defaultvalue.Office != editedvalue.Office)
        {
            // Never reaches this section, because defaultvalue contains always the same data as   
            // editedvalue
        }
    }
}

而customclass及其子类expandedclass看起来像这样:

public partial class customclass 
{
   public int ID {get; set;} 
   
   public string Articlenumber {get, set;}

   public bool Office {get; set;}
}

internal class expandedclass : customclass
{
   public DateTime Created {get; set;}

   public bool Deprecated {get; set;} 
}

如第一个代码部分所述,我从未到达 if 语句内的行,因为两个变量包含相同的值。 EditImage 类的输入是 ExpandedClass 类型,而不是 CustomClass。因此,即使当我将editedvalue指定为customclass时,它始终是expandedclass类型...

如何将 EditImage 的输入分配给变量,该变量不会通过窗口内的用户输入而更改?这样我就可以将默认输入与更改后的输入进行比较?

我尝试过的: 更改了变量赋值的顺序,将默认值设置为静态,将默认值设置为只读,将所有变量转换为自定义类

c# .net wpf data-binding datacontext
1个回答
0
投票

DataContext
设置为
customclass
的单独实例:

readonly customclass defaultvalue = new customclass();
public EditImage()
{
    InitializeComponent();
    this.DataContext = new customclass();
}

然后,您将能够使用数据绑定在视图中编辑此实例,同时

defaultvalue
保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.