Tôi có bộ kích hoạt dữ liệu WPF được đặt để kích hoạt khi giá trị là đúng.WPF DataTrigger không kích hoạt nếu giá trị vẫn giữ nguyên
Tôi muốn trình kích hoạt này kích hoạt mọi lúc giá trị này được đặt thành true, ngay cả khi nó đúng. Thật không may có vẻ như chỉ cháy nếu giá trị được thay đổi từ đúng sang sai hoặc ngược lại. Mô hình dữ liệu cơ bản của tôi đang kích hoạt sự kiện PropertyChanged của INotifyPropertyChanged ngay cả khi giá trị được đặt thành true hai lần liên tiếp nhưng Trigger dường như không chọn điều này.
Có cách nào để thực hiện kích hoạt chạy bất kể giá trị bị ràng buộc có thay đổi không?
Một số bạn đã yêu cầu mã này ở đây. Điều thú vị cần lưu ý là người chuyển đổi sẽ được gọi mỗi lần. Vấn đề là cụ thể hơn để chạy một hình ảnh động.
Cập nhật Nếu tôi thay đổi mã của mình để đặt lại giá trị thành sai và sau đó quay lại true, nó sẽ kích hoạt hoạt ảnh. Rõ ràng đây không phải là lý tưởng và không làm cho mã tốt đẹp để đọc. Tôi hy vọng có một cách tốt hơn để làm điều này.
Bất kỳ trợ giúp nào được đánh giá cao.
đang WPF
<Grid>
<Grid.Resources>
<Storyboard x:Key="AnimateCellBlue">
<ColorAnimation Storyboard.TargetProperty="Background.Color" From="Transparent" To="Blue" Duration="0:0:0.1" AutoReverse="True" RepeatBehavior="1x" />
</Storyboard>
</Grid.Resources>
<TextBox Name="txtBox" Text="{Binding DataContext.DisplayText, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.IsTrue, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Name="BidSizeUpStoryB" Storyboard="{StaticResource AnimateCellBlue}" />
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
Mã Đằng sau: -
public partial class MainWindow : Window
{
private DataItem _dataItem;
private DispatcherTimer _dispatcherTimer;
public MainWindow()
{
InitializeComponent();
_dataItem = new DataItem();
_dataItem.DisplayText = "Testing";
_dataItem.IsTrue = true;
this.DataContext = _dataItem;
_dispatcherTimer = new DispatcherTimer(TimeSpan.FromSeconds(1), DispatcherPriority.Normal, TimerCallbackHandler, Dispatcher);
}
private void TimerCallbackHandler(object s, EventArgs args)
{
Console.WriteLine("In Timer");
_dataItem.IsTrue = true;
_dataItem.DisplayText = "Timer " + DateTime.Now.Ticks;
}
}
DataItem: -
public class DataItem : INotifyPropertyChanged
{
private bool _isTrue;
private string _displayText;
public bool IsTrue
{
get { return _isTrue; }
set
{
_isTrue = value;
NotifyPropertyChanged("IsTrue");
}
}
public string DisplayText
{
get
{
return _displayText;
}
set
{
_displayText = value;
NotifyPropertyChanged("DisplayText");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
Hiển thị cho chúng tôi mã của thuộc tính và trình kích hoạt để chúng tôi không phải đoán. –
Vui lòng xem mã mẫu của tôi ở trên. Các hình ảnh động sẽ chỉ cháy một lần. – user630190