Binding works without INotifyPropertyChanged, why?
在不创建单独的视图模型的情况下直接将我的UI绑定到HTTP API模型是一种不好的做法吗?
唯一的缺点是它不会实现INotifyPropertyChanged
,因此当您从代码中更改属性时UI不会更新-但是如果您不需要从代码中更新属性怎么办?>
这是我的API响应模型:
public class EventResponseModel
{
public int Id { get; set; }
public string Subject { get; set; }
public string Description { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string ArgbColor { get; set; } // should bind to Brush
public Location Location { get; set; }
public IEnumerable<Person> Attendees { get; set; }
}
在上述模型中,我有ArgbColor
,需要在XAML中绑定到Brush
。我可能可以创建StringToBrushConverter : IValueConverter
使其工作,而不用创建单独的视图模型。
这始终是创建单独的视图模型,映射到它然后绑定到它的首选吗?
为了进行编辑,我仍将拥有一个单独的VM,并使用类似以下的组合:
public class EventVM
{
public EventResponseModel EditedEvent { get; set; }
// available locations etc., commands for saving
}
答案 0 :(得分:1)
在不创建单独的视图模型的情况下直接将我的UI绑定到HTTP API模型是一种不好的做法吗?
如果不是这样,那么您将能够并完全按照您的GUI应用程序的原样使用模型类。然后就没有理由仅仅为了它而创建视图模型包装器了,因为您基本上还是依赖于该API。
始终首选创建一个单独的视图模型,映射到该模型然后绑定到它吗?
不,并非总是如此。例如,如果要在某种网格中显示数百或数千个事件响应,则您不想为每个项目调用一个转换器。在这种情况下,最好包装模型并直接绑定到UI友好的Brush属性或类似属性。因此,这完全取决于您的要求。但是直接绑定到域对象并不总是一个坏主意。