Bạn có thể sử dụng trình chuyển đổi tùy chỉnh để thực hiện các phép tính đơn giản trực tiếp trong XAML.
Hãy xem, ví dụ, tại thực hiện điều này: sử dụng
MathConverter
đơn giản:
<RotateTransform Angle="{Binding Text, ElementName=Seconds,
Converter={ikriv:MathConverter}, ConverterParameter=x*6}" />
Phương pháp cổ điển là để tạo ra một tài sản readonly tính. Vì vậy, trong trường hợp đơn giản này, bạn có thể thêm thuộc tính thứ hai HalfWidth
.
public double HalfWidth
{
get
{
return ActualWidth/2.0;
}
}
Tin xấu là khi ActualWidth
được cập nhật, các StackPanel
trên quan điểm ràng buộc để HalfWidth
sẽ không cập nhật. Điều này là do chế độ xem không biết rằng HalfWidth
đã thay đổi.
Bằng cách tăng sự kiện đã thay đổi thuộc tính trên HalfWidth
trong setter của ActualWidth
, chế độ xem sẽ truy vấn HalfWidth
và do đó truy xuất giá trị chính xác.
private double _actualWidth;
public double ActualWidth
{
get
{
return _actualWidth;
}
set
{
if (_actualWidth != value)
{
_actualWidth = value;
OnPropertyChanged("ActualWidth");
OnPropertyChanged("HalfWidth");
}
}
}
Nguyên tắc chính về phương pháp này là sẽ sớm trở thành cơn ác mộng khi chúng tôi có nhiều thuộc tính được tính toán không có người định cư.
Đó là lý do tại sao (trong mẫu MVVM) cá nhân tôi thích sử dụng trình chuyển đổi tùy chỉnh.
Nguồn
2012-06-29 08:03:11
Bạn đang cố gắng làm gì? Nhận 'Chiều rộng' được đặt thành một nửa giá trị của' SP1.ActualWidth'? Nếu vậy, một 'Chuyển đổi 'có lẽ là những gì bạn đang theo sau. –
Vui lòng không sử dụng 'ActualWidth' trong các liên kết vì nó không phải là thuộc tính phụ thuộc và sẽ không nhất thiết phải làm những gì bạn mong đợi. Xem câu hỏi http://stackoverflow.com/questions/7403151 (WPF) và http://stackoverflow.com/questions/1602148 (Silverlight). –
@PhilipKendall, vâng đó là những gì tôi đang cố gắng làm. Tôi muốn SP2 là một nửa chiều rộng của SP1 mỗi khi cửa sổ được thay đổi kích cỡ. –