将对象绑定到 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吗?

将对象绑定到 WPF 中的数据触发器

你的问题不清楚你想做什么,你写道,你想一方面将 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

不要忘记设置数据上下文