【发布时间】:2020-03-28 16:42:01
【问题描述】:
我正在尝试通过将 IsVisible 绑定到 getter 属性来动态更新元素的可见性。但是,除非我刷新页面,否则 IsVisible 不会自动更改 UI。
以下是sn-p的代码:
xaml:
<StackLayout>
<Picker Title="Choose..." ItemsSource="{Binding MyItemOptions}" SelectedItem="{Binding MyItem}"/>
<Label Text="MyItem is Milk" IsVisible="{Binding Path=IsMilkItem}"/>
</StackLayout>
C#:
private string _myItem;
public string MyItem
{
get => _myItem;
set
{
SetValue(ref _myItem, value);
}
}
public bool IsMilkItem
{
get { return MyItem == "Milk"; }
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void RaisePropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
protected bool SetValue<T>(ref T field, T value, [CallerMemberName] string propertyName = null)
{
bool response = false;
if (field == null ||
!field.Equals(value))
{
field = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
response = true;
}
return response;
}
更新 MyItem 后,布尔属性在代码中更新。但是,在我手动重新渲染页面之前,UI 元素不会自动显示。
如果有人对此有解决方案,我将不胜感激。
【问题讨论】:
标签: c# xaml xamarin mvvm xamarin.forms