将对象绑定到 WPF 中的数据触发器
本文关键字:数据 触发器 WPF 对象 绑定 | 更新日期: 2023-09-27 18:34:31
每当按下Button
时,我都会尝试在我的应用程序中创建一个Grid
。
XAML
<Grid Name="SideBarGrid" HorizontalAlignment="Right">
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Width" Value="0"/>
<Style.Triggers>
<DataTrigger Binding="What do I put Here?" Value="True"> // HERE
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.1" Storyboard.TargetProperty="Width" To="400" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duration="0:0:0.1" Storyboard.TargetProperty="Width" To="0" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
C#
public partial class MoviePanel : Window {
public MoviePanel() {
InitializeComponent();
}
// List to hold movieDetail objects (each movie is stored with an image and title
List<MediaDetail> movies = new List<MediaDetail>();
MediaDetail selectedMovie;
private void SelectMovie_Click(object sender, RoutedEventArgs e)
{
foreach (MediaDetail media in movies)
{
if (media.id == movieID)
{
selectedMovie = media;
selectedMovie.toDisplay = true;
}
}
}
媒体详情
public class MediaDetail
{
public string id { get; set; }
public bool toDisplay { get; set; }
}
我不确定我应该如何将selectedMovie
对象绑定到DataTrigger
。我还应该声明dependency property
吗?
你的问题不清楚你想做什么,你写道,你想一方面将 DataTrigger 绑定到选定的电影,另一方面绑定到按钮的 IsPressed 属性。
如果要绑定到按钮的 已按下
在这种情况下,您不需要数据触发器,您需要一个简单的触发器:
<Trigger Property="IsPressed" Value="True" SourceName="YOUR_BUTTON_NAME">
<!--Your storyboard-->
</Trigger>
当您想要将行为绑定到代码隐藏(通常在 ViewModel 中(中的属性时,DataTrigger 很有用,这里似乎需要绑定到另一个控件的 DP,一个简单的触发器就可以做到这一点。
不要忘记命名您的按钮。
如果您确实要绑定到选定的电影
您选择的电影不是一个属性,您需要一个属性来绑定数据触发器到它。
private MediaDetail _selectedMovie;
public MediaDetail SelectedMovie {
get {return _selectedMovie;}
private set {
_selectedMovie = value;
//notifypropertychanged
}
}
若要通知属性已更改,需要实现 INotifyPropertyChanged。或者将"所选影片"字段转换为 DP。
因此,您的数据触发器将是:
<DataTrigger Binding="{Binding SelectedMovie, Mode=OneWay}" Value="THE VALUE">
假设 DataContext 是您的 MoviePanel
不要忘记设置数据上下文