【问题标题】:Get Item from Checked Change event (RoutedEventArgs) WPF从 Checked Change 事件 (RoutedEventArgs) WPF 中获取项目
【发布时间】:2014-04-22 15:24:56
【问题描述】:

我想知道是否可以从 WPF 中的选中更改事件中获取 Item 源项?

XAML

                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding Active, Mode=TwoWay}" Checked="CheckBox_Checked" HorizontalAlignment="Center"></CheckBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>

示例 C#(在正确答案的行上。我希望)

     private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {

        **// Its not e.source, most events it's e.item...but the checked event doesn't use this..**

        Customer c = e.Source as Customer;



        if(c != null)
        .....
    }

谢谢

【问题讨论】:

  • 你要那个干什么? UI is NOT Data。如果您的复选框已经绑定到底层对象,为什么不只监听底层对象的属性变化呢?你想做什么?
  • ,因为基础对象来自观测值,我想聆听单个属性事件,即检查活动复选框时,该集合将不允许允许,但我也需要行数据,但我也需要行数据还有
  • UI 不是放置您需要的任何业务逻辑的正确位置。在您的数据项中侦听 PropertyChanged 事件,或者将您的逻辑放在委托中并在 Active 属性的设置器中调用它。或者使用类似Selectable&lt;T&gt; 的方法。
  • 我同意逻辑需要进入 ViewModel,但他选择的 不起作用,因为它只在第一次单击行时选择行,而不是在复选框上。委托的好主意,但我将在模型中设置它..而不是视图模型..再次不正确地使用 MVVM?

标签: c# wpf xaml events


【解决方案1】:

类似这样,假设你没有关注 MVVM

  private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
      bool IsActive = (sender as CheckBox).IsChecked;
      if(IsActive)
      {
         Active;
      }
    }

【讨论】:

  • 我正在关注 MVVM,但我意识到在 ViewModel 中的 ObservableCollection 中获取单个属性并不容易,并且需要大量代码来完成我需要的操作。所以这是一个快速(但凌乱的替代品)会看看
【解决方案2】:

你可以像Refernece那样做

Reference 2

视图模型

private bool _isactive;

    public bool IsActive
    {
        get { return _isactive; }
        set
        {
            _isactive = value;
            RaisePropertyChanged(() => IsActive);
        }
    }

如果你想在 mvvm 中获取 eventargs。使用中继命令或 Icommand

xaml

<CheckBox x:Name="chkbox" Command="{Binding CommandName}"
                      CommandParameter="{parameter}"/>

处理命令做必要的动作。

【讨论】:

  • 这种语法很有意义,我想怎么做,但属性 _isactive 不会是当前 DataContext 的一部分。所以基本上,不是收藏的一部分。所以要做到以上,我猜我需要使用RelativeSource?
  • 如果源绑定不是当前数据上下文的一部分,请使用相对源。尝试参考会有所帮助。或发布更多代码,我会尽我所能提供帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
相关资源
最近更新 更多