gpt4 book ai didi

c# - 在 MVVM 中定义从模型到 View 的属性更改的理想方法是什么?

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

我正在尝试重构 MVVM 架构中的一些代码。
该模型具有直接更改的公共(public)值。

UI 监听这些值的变化。

下面是事件信号代码:

public string LoadFilename   { get { return _loadFilename;   } set { _loadFilename   = value; OnPropertyChanged(); } }
public string SaveFilename { get { return _saveFilename; } set { _saveFilename = value; OnPropertyChanged(); } }
public string OneSafFilename { get { return _oneSafFilename; } set { _oneSafFilename = value; OnPropertyChanged(); } }

public bool IsSaveEnabled { get { return _isSaveEnabled; } set { _isSaveEnabled = value; OnPropertyChanged(); } }
public bool IsLoadEnabled { get { return _isLoadEnabled; } set { _isLoadEnabled = value; OnPropertyChanged(); } }
public bool IsLoadCheckpointEnabled { get { return _isLoadCheckpointEnabled; } set { _isLoadCheckpointEnabled = value; OnPropertyChanged(); } }
public bool IsCheckpointEnabled { get { return _isCheckpointEnabled; } set { _isCheckpointEnabled = value; OnPropertyChanged(); } }
public bool IsScenariosEnabled { get { return _isScenariosEnabled; } set { _isScenariosEnabled = value; OnPropertyChanged(); } }

这里是 OnPropertyChanged功能:
    public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}

对于 MVVM 中应该很自然的东西,这似乎是很多样板。
我想让它更简洁,但我不知道从哪里开始。

使用监听上述属性的 View ,getter 和 setter 应该是什么样子?

最佳答案

实现 INPC 始终是 WPF/XAML 的丑陋部分。有了一个好的基类,它可以减少到 { get { return _loadFilename; } set { Set(ref _loadFilename, value); } }但这将尽可能紧凑。 Resharper 支持(重构)这个。

顺便说一句,您的代码也缺少优化保护 if(value != _loadFilename) .所以一个BindableBase基类绝对是个好主意。

关于c# - 在 MVVM 中定义从模型到 View 的属性更改的理想方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39861509/

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