我的WCF应用程序支持从远程服务下载书籍。 用户向服务发送下载书籍的请求,该服务获取请求并下载该书。作为响应,它将基于枚举值的下载进度发送给客户端。
状态是枚举值。
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");
}
}
}
答案 0 :(得分:1)
您没有为Percent
财产筹集任何PropertyChanged。
您可以在RaisePropertyChanged("Percent");
之后添加RaisePropertyChanged("Status");
,这样当您更改Status
值Percent
时,通知也会被提升。
答案 1 :(得分:0)
通过在Staus的setter中调用RaisePropertyChanged(“Percent”) view将查询Percent,从而检索正确的值。
视图受限于Percent,一个计算属性。更新状态时,百分比(属性更新)但绑定到百分比的视图将不会更新。这是因为视图不知道百分比已经改变(我们从未告诉它)。百分比也没有支持属性!
public Status Status
{
get
{
return Book.Status;
}
set
{
Book.Status = value;
RaisePropertyChanged("Status");
RaisePropertyChanged("Percent");
}
}