- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Xamarin.Forms 中,我实现了一个自定义Picker
。ItemsSource
设置正确。但是,当我更改所选项目时,它不会更新我的 ViewModel 上的属性。
BindablePicker
:
public class BindablePicker : Picker
{
public BindablePicker()
{
this.SelectedIndexChanged += OnSelectedIndexChanged;
}
public static BindableProperty ItemsSourceProperty =
BindableProperty.Create<BindablePicker, IEnumerable>(o => o.ItemsSource, default(IEnumerable), propertyChanged: OnItemsSourceChanged);
public static BindableProperty SelectedItemProperty =
BindableProperty.Create<BindablePicker, object>(o => o.SelectedItem, default(object), propertyChanged: OnSelectedItemChanged);
public IEnumerable ItemsSource
{
get { return (IEnumerable)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
public object SelectedItem
{
get { return (object)GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
private static void OnItemsSourceChanged(BindableObject bindable, IEnumerable oldvalue, IEnumerable newvalue)
{
var picker = bindable as BindablePicker;
picker.Items.Clear();
if (newvalue != null)
{
//now it works like "subscribe once" but you can improve
foreach (var item in newvalue)
{
picker.Items.Add(item.ToString());
}
}
}
private void OnSelectedIndexChanged(object sender, EventArgs eventArgs)
{
if (SelectedIndex < 0 || SelectedIndex > Items.Count - 1)
{
SelectedItem = null;
}
else
{
SelectedItem = Items[SelectedIndex];
}
}
private static void OnSelectedItemChanged(BindableObject bindable, object oldvalue, object newvalue)
{
var picker = bindable as BindablePicker;
if (newvalue != null)
{
picker.SelectedIndex = picker.Items.IndexOf(newvalue.ToString());
}
}
}
Xaml
页面:
<controls:BindablePicker Title="Category"
ItemsSource="{Binding Categories}"
SelectedItem="{Binding SelectedCategory}"
Grid.Row="2"/>
ViewModel
属性未在属性上实现 NotifyPropertyChanged
,因为它们只需要从“View”更新为
View 模型`:
public Category SelectedCategory { get; set; }
public ObservableCollection<Category> Categories { get; set; }
最佳答案
创建 BindableProperty 时:
public static BindableProperty SelectedItemProperty =
BindableProperty.Create<BindablePicker, object>(o => o.SelectedItem, default(object), propertyChanged: OnSelectedItemChanged);
如果不指定 defaultBindingMode
,BindingMode
将设置为 OneWay
,这意味着 Binding 从源(您的 View 模型)更新到目标(您的观点)。
这可以通过更改 defaultBindingMode 来解决:
public static BindableProperty SelectedItemProperty =
BindableProperty.Create<BindablePicker, object>(o => o.SelectedItem, default(object), BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
或者,如果您希望选择器使用默认值,但只想在此 View 中更新源,则可以仅为此 Binding 实例指定 BindingMode:
<controls:BindablePicker Title="Category"
ItemsSource="{Binding Categories}"
SelectedItem="{Binding SelectedCategory, Mode=TwoWay}"
Grid.Row="2"/>
关于xaml - ViewModel 上的 BindableProperty 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444498/
在自定义 ContentView 上,我创建了一个 BindableProperty,如下所示 public static readonly BindableProperty StrokeColorP
我无法将值绑定(bind)到我创建的自定义 ContentView。 我的 MainPage 使用 CustomFrameView,它是一个 ContentView。 我的 CustomFrameVi
我想获得 BindableProperty 的值,因为我希望我的 BindableProperty 有两个状态,因为我可以区分 在我的自定义条目中: public static Binda
在 Xamarin.Forms 中,我实现了一个自定义Picker。ItemsSource 设置正确。但是,当我更改所选项目时,它不会更新我的 ViewModel 上的属性。 BindablePick
我正在通过 XAML 在我的 App.xaml 中添加资源。此资源是将分配给 CustomControl 的隐式样式。 CustomControl 包含一个标签。 为了设置此标签的 TextColor
我制作了一个非常简单的是/否 RadioBox 控件。 在其背后的代码中,我有以下 BindableProperty: public static readonly BindablePrope
我一直在研究 Ed Snider 的书 Mastering Xamarin.Forms。第 71 页指示创建一个类 DatePickerEmtryCell,它继承自 EntryCell。它显示添加以下
我制作了一个显示文本的自定义 View 。 在 TestView.xaml 中 和代码隐藏 在 TestView.xaml.cs 中
在 Xamarin Forms 中,我创建了一个包含自定义组件的页面,我想像这样提供一个值: 然而,这不起作用。当我使用原始数字而不是 Binding 时,它会起作用。我发现的问题是,我的自定义组件
我有 F# + Xamarin.Forms 工作,实际上没有使用 C#。它工作正常,但现在我正在尝试在我正在创建的控件上创建一个 BindableProperty。它有点工作,但是当我尝试在 XAML
背景信息 我正在 XAML 中开发 Xamarin Forms(v4.1.1.3,在 iOS 上测试)应用程序,使用 MVVM 和先查看方法;我正在使用 MVVMLight 的 ViewModelLo
在 Xamarin.Forms 的 xaml 中,我有一个自定义控件,我想添加 int 类型的属性。我想我必须使用 Bindable 属性,所以稍后我可以从 ViewModel 绑定(bind)一个属
在 WPF 开发方面有很多经验,我现在正在尝试创建我的第一个 Xamarin.Forms 应用程序。我认识到有一些等效于 WPF DependencyProperty 的称为 BindableProp
假设我有一个 View ,带有 其中的元素,根据它在 View 模型中是否具有非 null 属性而可见。像这样: 有了这个 ViewModel(只复制了相关部分): private string u
我一直在尝试弄清楚如何在 BindableProperty 更改时调用自定义渲染器 OnElementChanged。 在我的例子中,为了便于理解,我需要在 android、uwp、ios 渲染器中刷
我是一名优秀的程序员,十分优秀!