【问题标题】:WPF - update a dependency property from a DataTriggerWPF - 从 DataTrigger 更新依赖属性
【发布时间】:2023-03-28 11:32:01
【问题描述】:

我有一个 listView 并希望在选择项目时从 DataContext 更新公共值。 我知道我可以通过列表视图中的 SelectedItem 执行此操作,我想使用数据触发器执行此操作(如果可能)。

代码:

<Window.DataContext>
    <local:MainWindowViewModel></local:MainWindowViewModel>
</Window.DataContext>
<Grid>
    <ListView ItemsSource="{Binding listsToDisplay}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding listName}"></TextBlock>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListViewItem}}, Path=IsSelected}" Value="True">
                        <Setter Property="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindowViewModel}}, Path=listWidth}" Value="1"></Setter>
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ListView.ItemTemplate>      
    </ListView>
</Grid>

【问题讨论】:

    标签: wpf data-binding triggers dependency-properties


    【解决方案1】:

    我想使用数据触发器来执行此操作(如果可能)。

    这是不可能的。您不能在样式的设置器中设置视图模型属性的值。

    样式设置器只能设置属于应用样式的元素的属性的值。

    【讨论】:

      【解决方案2】:

      您可以将 listView 的选定项绑定到 viewmodel 上的属性,然后当该值通过属性更改时在 viewmodel 中进行更新。

      <ListView ItemsSource="{Binding listsToDisplay}" SelectedItem="{Binding SelectedItem}">
          <ListView.ItemTemplate>
              <DataTemplate>
                  <TextBlock Text="{Binding listName}"></TextBlock>                
          </ListView.ItemTemplate>      
      </ListView>
      

      这还具有允许您在 viewModel 中获取或设置所选项目的优点。

      【讨论】:

      • 我知道我可以通过 ListView 中的 SelectedItem 做到这一点,如果可能的话想通过触发器做到这一点
      • 尝试将 setter 更改为此
      • 不幸的是,我仍然收到错误消息:无法在“Setter”类型的“Property”属性上设置“Binding”。只能在 DependencyObject 的 DependencyProperty 上设置“绑定”。
      猜你喜欢
      • 2023-04-07
      • 2011-01-01
      • 2012-01-31
      • 2018-05-20
      • 2010-12-26
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多