我有一个无法设置属性的接口:
public interface IThing
{
string MyText { get; }
}
我有一个允许设置属性的实现:
public class Thing : ObservableObject, IThing
{
private string myText = "Testing 1 2 3";
public string MyText
{
get { return this.myText; }
set
{
if (this.myText != value)
{
this.myText = value;
this.RaisePropertyChanged("MyText");
}
}
}
}
我这样做是为了通过接口传递我的对象,其他代码不能更改属性,但任何具有实际实现的代码都可以。
但是当我有一个包含 IThing 的视图模型并绑定到 XAML 中的属性时,我发现 XAML 仍然可以设置它们!
有哪些方法可以防止这种情况?谢谢你的帮助。
编辑:一些不完善的解决方法:
使实现类中的设置器成为内部的。由于碰巧我的视图位于单独的程序集中,因此不允许 XAML 设置它们。但这只是巧合。如果我的观点在同一个程序集中怎么办?
创建另一个包含我的实现类的类,但不提供所有属性的设置器。这似乎可行,但似乎很烦人。
仍在寻找更好的选择。