gpt4 book ai didi

c# - MVVM Light 和 set 数据模型字段

转载 作者:行者123 更新时间:2023-12-03 10:12:32 24 4
gpt4 key购买 nike

这里是使用MVVM Light的基本模式Set方法:

public class MyViewModel : ViewModelBase
{
private string _text;
public Text
{
get{ return _text; }
set{ Set(()=>Text, ref _text, value); }
}
}

但是在我的项目中,我将字段保留在 DataModel 类中,这对于克隆数据和复制取消修改非常有用:
public class MyDataModel
{
public string Text;
}

public class MyViewModel : ViewModelBase
{
private MyDataModel data;
public Text
{
get{ return data.Text; }
set{ data.Text = value; RaisePropertyChanged(()=>Text); }
}
}

但在这种情况下,我不能使用 Set方法,因为它的第二个参数是 ref我不能使用 data.Text作为 ref范围。
Set( ()=>Text, ref data.Text, value ); // - its error

欢迎任何有关如何解决此问题的想法。

最佳答案

代码无效,因为“属性或索引器不能作为 out 或 ref 参数传递”。您可以覆盖 ViewModelBase 并添加另一个 Set 重载,如下所示:

protected void Set<T>(Func<T> get, Action<T> set, T value, [CallerMemberName] string propertyName = null)
{
T currentValue = get();

if (EqualityComparer<T>.Default.Equals(currentValue, value))
return;

OnPropertyChanging(propertyName, currentValue);
set(value);
OnPropertyChanged(propertyName, value);
}
然后使用:
public string Text
{
get => data.Text;
set => Set(() => data.Text, x => data.Text = x, value);
}

关于c# - MVVM Light 和 set 数据模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30877137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com