我正在从主页调用页面,并使用 QueryProperty 传递字符串。我想评估这个字符串并根据传递的字符串创建不同的对象列表,以便我可以为不同的事情重用同一页面。
问题是,当 EnterValueViewModel 运行并且我想检查传递的字符串时,该值仍然为 null。赋值后如何运行 if 语句?
[QueryProperty("TypeOfCaller", "TypeOfCaller")]
public partial class EnterValueViewModel : ObservableObject
{
[ObservableProperty]
string typeOfCaller;
[ObservableProperty]
ObservableCollection<string> listOfObjects;
public EnterValueViewModel()
{
if (typeOfCaller == "PermitHolder")
{
listOfObjects = new ObservableCollection<string>(PermitHolderRepository.GetPermitHolders().Select(p => p.Name));
}
else if (typeOfCaller == "Company")
{
listOfObjects = new ObservableCollection<string>(CompanyRepository.GetCompanies().Select(p => p.Name));
}
else if (typeOfCaller == "Facility")
{
listOfObjects = new ObservableCollection<string>(FacilityRepository.GetFacilities().Select(p => p.Name));
}
}
我尝试将 if 语句放入方法中,但我不知道何时调用它。我需要一个在页面加载后但用户可以与其交互之前执行的事件。
要在可观察属性更改时执行代码,请使用该属性的自动生成方法之一。
https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/generators/observableproperty
另外,如果每次都要重新创建 ObservableCollection,为什么还要使用它呢?只需创建一次集合并根据需要更新即可。
public partial class EnterValueViewModel : ObservableObject
{
[ObservableProperty]
string typeOfCaller;
public ObservableCollection<string> ListOfObjects {get;} = new ObservableCollection<string>();
partial void OnTypeOfCallerChanged(string newValue)
{
ListOfObjects.Clear();
List<string> newObjects;
if (newValue == "PermitHolder")
{
newObjects = PermitHolderRepository.GetPermitHolders().Select(p => p.Name)).ToList();
}
else if (newValue == "Company")
{
newObjects = CompanyRepository.GetCompanies().Select(p => p.Name)).ToList();
}
else if (newValue == "Facility")
{
newObjects = FacilityRepository.GetFacilities().Select(p => p.Name)).ToList();
}
else
{
return;
}
foreach(string newObject in newObjects)
{
ListOfObjects.Add(newObject);
}
}
}