【问题标题】:Bind IsEnabled to linq property with linq expression使用 linq 表达式将 IsEnabled 绑定到 linq 属性
【发布时间】:2017-07-31 18:30:44
【问题描述】:

我想将 XAML 按钮的属性“IsEnabled”绑定到条件,例如“仅当我的 Observable 集合中的所有项目都具有 IsValid 属性 = true 时才启用按钮”。所以 Linq 表达式看起来像:

MyObsCollectionProp.Any(record=>!record.IsValid)

 MyObsCollectionProp.All(record=>record.IsValid)

有人可以告诉我这样做的合法有效(对于 MVVM 模式)方式吗?

【问题讨论】:

  • 将其作为模型中的属性返回?
  • @Aybe,是的,但是在视图模型中,而不是模型中,并将其绑定到 xaml 中的 IsEnabled 属性

标签: c# linq xaml mvvm binding


【解决方案1】:

将名为 IsButtonEnable 的布尔属性声明为:

private bool isButtonEnable;
public bool IsButtonEnable
{
    get
    {
        return isButtonEnable;
    }
    set
    {
        isButtonEnable = value;
        OnPropertyChanged("IsButtonEnable");
    }
}

用这个属性绑定一个按钮:

<Button Content="Save Data" IsEnable="{Binding IsButtonEnable, UpdateSourceTrigger=PropertyChanged}"></Button>

现在在您的 ViewModel 中将 ObservableCollectionChanged 事件绑定为:

public MyViewModel()
{
    MyObsCollectionProp = new ObservableCollection<YourModel>();
    MyObsCollectionProp += MyObsCollectionProp_Changed;
}
void MyObsCollectionProp_Changed(object sender, NotifyCollectionChangedEventArgs e)
{
    // Handle here
    IsButtonEnable = MyObsCollectionProp.All(record=>record.IsValid)
}

【讨论】:

  • 我已经开启和关闭 WPF 大约 8 年了,但从来不知道 ObservableCollection-changed 事件是一回事。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多