将UI直接绑定到API模型

时间:2019-06-13 08:46:58

标签: wpf xaml mvvm

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
}

1 个答案:

答案 0 :(得分:1)

  

在不创建单独的视图模型的情况下直接将我的UI绑定到HTTP API模型是一种不好的做法吗?

如果不是这样,那么您将能够并完全按照您的GUI应用程序的原样使用模型类。然后就没有理由仅仅为了它而创建视图模型包装器了,因为您基本上还是依赖于该API。

  

始终首选创建一个单独的视图模型,映射到该模型然后绑定到它吗?

不,并非总是如此。例如,如果要在某种网格中显示数百或数千个事件响应,则您不想为每个项目调用一个转换器。在这种情况下,最好包装模型并直接绑定到UI友好的Brush属性或类似属性。因此,这完全取决于您的要求。但是直接绑定到域对象并不总是一个坏主意。