基于枚举

时间:2015-10-12 06:41:06

标签: wpf data-binding

我的WCF应用程序支持从远程服务下载书籍。 用户向服务发送下载书籍的请求,该服务获取请求并下载该书。作为响应,它将基于枚举值的下载进度发送给客户端。

我的观点:
https://onedrive.live.com/redir?resid=3A8F69A0FB413FA4!123&authkey=!AJK3wiB_C_LqayQ&v=3&ithint=photo%2cpng

状态是枚举值。

public enum Status { Pending, Started, Completed };

BookModel

public class BookModel
    {
        public string Title { get; set; }
        public string Author { get; set; }
        public string Description { get; set; }
        public Status Status { get; set; }
    }

我的任务是根据枚举值更新ui。

待定 - 应显示0%填充饼。

陈述 - 应该显示50%的馅饼。

已完成 - 应显示100%填充饼。

应更新的必需属性是" EndAngle" (双数据类型)的PieSlice对象(在Book.xaml中)。 我把这个属性绑定到" Percent"我的BookViewModel中的对象,但是当书籍状态发生变化时,不会使用新状态值更新饼图。

感谢。

Book.xaml

  <Label Grid.Row="0">Title</Label>
        <Label Grid.Row="1">Author</Label>
        <Label Grid.Row="2">Description</Label>

        <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Title}"/>
        <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Author}"/>
        <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Description}"/>
        <Button Grid.Column="2" Grid.RowSpan="3" Command="{Binding SaveCommand}" Content="Download" />


        <Ellipse   Grid.Column="3" 
                    Height="20" Width="20"  
                    Stroke="Black" 
                    StrokeThickness="0.5" 
                    HorizontalAlignment="Center" 
                   Grid.Row="1"
                    />
        <Controls:PieSlice Grid.Column="3" Grid.Row="1" Stroke="Black" Fill="Black" 
                             Height="20" Width="20" 
                             StartAngle="0" EndAngle="{Binding Percent}"
                             HorizontalAlignment="Center" />

BookViewModel

  public class BookViewModel : ViewModelBase
    {
        private readonly BookModel Book;

        /// <summary>
        /// Initializes a new instance of the MainViewModel class.
        /// </summary>
        public BookViewModel(BookModel model)
        {
            this.Book = model;
        }


        public double Percent
        {
            get
            {
                return Book.Status == Status.Pending ? 0 :
                    Book.Status == Status.Started ? 180 :
                    Book.Status == Status.Completed ? 360 : 0;
            }
        }
     public Status Status
        {
            get
            {
                return Book.Status;
            }
            set
            {
                Book.Status = value;
                RaisePropertyChanged("Status");
            }
        }
}

2 个答案:

答案 0 :(得分:1)

您没有为Percent财产筹集任何PropertyChanged。 您可以在RaisePropertyChanged("Percent");之后添加RaisePropertyChanged("Status");,这样当您更改StatusPercent时,通知也会被提升。

答案 1 :(得分:0)

  

通过在Staus的setter中调用RaisePropertyChanged(“Percent”)   view将查询Percent,从而检索正确的值。

视图受限于Percent,一个计算属性。更新状态时,百分比(属性更新)但绑定到百分比的视图将不会更新。这是因为视图不知道百分比已经改变(我们从未告诉它)。百分比也没有支持属性!

 public Status Status
    {
        get
        {
            return Book.Status;
        }
        set
        {
            Book.Status = value;
            RaisePropertyChanged("Status");
            RaisePropertyChanged("Percent");
        }
    }