【问题标题】:Synchronize the IsEnabled property of a control with another boolean property将控件的 IsEnabled 属性与另一个布尔属性同步
【发布时间】:2017-11-26 05:54:09
【问题描述】:

我正在构建一个 Xamarin 应用程序,并且我有一个包含 Picker 和 Switch 的内容页面。

The Picker shall be disabled when the IsToggled property of the picker is set to true, and vice versa.因此,我将涉及的各个属性限制为 ViewModel 类的属性,如下所示:

//XAML:
<Switch IsToggled="{Binding UseNearestShop}"/>
<Picker Title="Select your favorite shop" ItemsSource="{Binding AvailableShops}" SelectedItem="{Binding FavoriteShop}" IsEnabled="{Binding UseNearestShop, Converter={StaticResource booleanNegation}}"/>

因此,当页面初始化时,Picker 是否正确切换取决于我的 ViewModel UseNearestShop 属性的值(它本身通过 Picker 的切换正确修改)。

我的问题是: 如何在每次修改 UseNearestShop 值时修改 IsEnabled 属性?我是否必须在我的 ViewModel 中为其添加另一个属性?

任何见解都将不胜感激。

【问题讨论】:

  • 您是否正在实施 INotifyPropertyChanged?
  • 是的,我会在执行设置时通知属性更改。

标签: c# xaml xamarin mvvm xamarin.forms


【解决方案1】:
<StackLayout>
    <Switch x:Name="MySwitch" />
    <Picker IsEnabled="{Binding IsToggled, Source={x:Reference MySwitch}, Converter={StaticResource booleanNegation}}" />
</StackLayout>

您甚至可以从视图模型中移除令人兴奋的属性,而不是添加新属性!

而且我认为您当前的代码存在问题,因为您的视图模型中的 INotifyPropertyChanged 实现错误。

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 2013-04-20
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多