Имам текстов блок, който се свързва с двойно свойство, наречено „AdminTime“ в моя клас JobItem. AdminTime изчислява общите административни часове, които са в наблюдаема колекция, наречена TimeLog. Използвам текстово поле, за да добавя тези администраторски часове в класа JobItem. Ето намаления код:
<TextBlock Style="{StaticResource TextBlockStyle}" Grid.Row="1" Grid.Column="1" Name="adminHrs" Text="{Binding Path=AdminTime, UpdateSourceTrigger=Explicit, Mode=OneWay, StringFormat={}{0:0.00}}" />
<TextBox Style="{StaticResource textBoundStyle}" Name="adminTimeTxtBox" Grid.Row="3" Grid.Column="1" />
<Button Style="{StaticResource addTimeStyle}" Name="addAdBtn" Grid.Column="1" Grid.Row="3" Click="addAdBtn_Click" />
<Button Style="{StaticResource subTimeStyle}" Name="subAdBtn" Grid.Column="1" Grid.Row="3" Click="subAdBtn_Click" />
А за кода отзад имам манипулатора за щракване на бутона addTime. Моля, имайте предвид, че разбирам, че моят UpdateSourceTrigger вече е включен изрично и че не трябва да актуализирам своя източник, но просто проверявах дали ще помогне на проблема ми:
public static readonly DependencyProperty AdminTimeProperty =
DependencyProperty.Register("AdminTime", typeof(double),
typeof(UpdateJobDialog));
private void addAdBtn_Click(object sender, RoutedEventArgs e)
{
AddHours();
}
private void AddHours()
{
item.AddTime(emp.UserType, emp.UserId, DateTime.Now, double.Parse(adminTimeTxtBox.Text));
BindingExpression adHr = adminHrs.GetBindingExpression(TextBlock.TextProperty);
adHr.UpdateSource();
}
и в моя JobItem Class имам този код:
public double AdminTime
{
get
{
double newTime = 0.00;
if (TimeLog != null)
{
foreach (HoursWorked hw in TimeLog)
{
if (hw.EmployeeType == "Admin")
newTime += hw.Hours;
}
}
adminTime = newTime;
return adminTime;
}
set
{
if (AdminTime != value)
{
adminTime = value;
OnPropertyChanged("AdminTime");
}
}
}
public void AddTime(string employeeType, string userId, DateTime datePosted, double hours)
{
HoursWorked newLog;
newLog = new HoursWorked(employeeType, userId, datePosted, hours);
TimeLog.Add(newLog);
}
public ObservableCollection<HoursWorked> TimeLog
{
get { return timeLog; }
set
{
if (!TimeLog.Equals(value))
{
timeLog = value;
OnPropertyChanged("TimeLog");
}
}
}
Моят текстов блок се свързва, когато изляза от прозореца и след това го отворя отново, това, което искам, е моят текстов блок да се актуализира, след като щракна върху addAdBtn. Не искам да се налага да отварям диалоговия прозорец, за да мога да видя моя административен текстов блок и бутон, да добавя часа, да затворя диалоговия прозорец и да го отворя отново, за да видя актуализиран текстов блок.