我目前正在使用 .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 的输入分配给变量,该变量不会通过窗口内的用户输入而更改?这样我就可以将默认输入与更改后的输入进行比较?
我尝试过的: 更改了变量赋值的顺序,将默认值设置为静态,将默认值设置为只读,将所有变量转换为自定义类
将
DataContext
设置为 customclass
的单独实例:
readonly customclass defaultvalue = new customclass();
public EditImage()
{
InitializeComponent();
this.DataContext = new customclass();
}
然后,您将能够使用数据绑定在视图中编辑此实例,同时
defaultvalue
保持不变。