gpt4 book ai didi

c# - MvvmCross 自定义绑定(bind)通过 INotifyPropertyChanged

转载 作者:行者123 更新时间:2023-11-30 16:17:26 30 4
gpt4 key购买 nike

我遇到了与 this 类似的情况, 但在触摸中。尝试通过 INotifyPropertyChanged 来处理这个问题。

我的代码如下:

set.Bind(txtSearch).For(x => x.Text).To(x => x.SearchText);

其中 txtSearch 是我自定义的 UISearchBar 包装器。所以,我不能从 MvxNotifyPropertyChanged 继承,因为我已经从 UIView 继承(包装器是 View )。

文本属性为:

 public string Text { get
{
return _search.Text;
} set
{
_search.Text = value;
RaisePropertyChanged(() => Text);
}
}

然后我在 SearchBar 文本更改时触发它(有效)。

我还添加了以下内容:

    public event PropertyChangedEventHandler PropertyChanged;

protected IMvxMainThreadDispatcher Dispatcher
{
get { return MvxMainThreadDispatcher.Instance; }
}

protected void InvokeOnMainThread(Action action)
{
if (Dispatcher != null)
Dispatcher.RequestMainThreadAction(action);
}
protected void RaisePropertyChanged<T>(Expression<Func<T>> property)
{
var name = this.GetPropertyNameFromExpression(property);
RaisePropertyChanged(name);
}

protected void RaisePropertyChanged(string whichProperty)
{
var changedArgs = new PropertyChangedEventArgs(whichProperty);
RaisePropertyChanged(changedArgs);
}

protected void RaisePropertyChanged(PropertyChangedEventArgs changedArgs)
{
// check for subscription before going multithreaded
if (PropertyChanged == null)
return;

InvokeOnMainThread(
() =>
{
var handler = PropertyChanged;

if (handler != null)
handler(this, changedArgs);
});
}

但是当一切都到达 RaisePropertyChanged 时,我看到 PropertyChanged 是空的(因此,似乎没有为我的对象订阅代码)。当然,这不会进一步发出通知。

我有类似的情况,但某些对象直接继承自 MvxNotifyPropertyChanged,这似乎工作正常。这是否意味着 MvvmCross 只能处理此类对象而不能处理通常使用 INotifyPropertyChanged 的​​对象?

谢谢!

最佳答案

INotifyPropertyChanged 在 ViewModel 端用于属性更改。

在 View 方面,MvvmCross 在 Windows 上使用 DependencyProperty 绑定(bind),在 Xamarin 平台上使用 C# 方法、属性和事件。

INotifyPropertyChanged 在 View 端默认不提供 - 因为没有现成的 View 对象支持 INotifyPropertyChanged,所以尝试绑定(bind)是没有意义的在任何 MvvmCross View 平台中使用它。

但是,绑定(bind)系统是可扩展的 - 所以如果有人想编写基于 INotifyPropertyChanged 的 View 并希望为 View 端包含自定义 INotifyPropertyChanged 绑定(bind),那么他们可以按照类似于 In MvvmCross how do I do custom bind properties 的步骤执行此操作以及以下链接自 https://speakerdeck.com/cirrious/custom-bindings-in-mvvmcross 的示例

如果他们想为 View 端编写一个基于 INotifyPropertyChanged 的系统,那么我确信这可以使用自定义绑定(bind)方法来实现——但这不是我个人做过的事情。我希望这样的自定义绑定(bind)也适用于 INotifyPropertyChangedMvxNotifyPropertyChanged(因为 MvxNotifyPropertyChanged 实现了 INotifyPropertyChanged) - 但我想这将由作者决定其机制。

关于c# - MvvmCross 自定义绑定(bind)通过 INotifyPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190609/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com