IsEnabled绑定属性不禁用输入字段

时间:2017-11-17 13:12:54

标签: c# xamarin xamarin.forms

我已经使用事件来命令输入字段上的行为,以在用户开始键入当前输入字段时触发禁用另一个屏幕输入字段的命令。 要清楚命令行为的事件工作正常,绑定也是如此,这意味着我已经在两者上放置了调试点,并且在执行代码时它们被命中。问题是,即使它们被击中,IsEnabled属性也不会在其他输入字段上发生变化。

代码:

Xaml:

                  <Entry 
                   PlaceholderColor="Black"
                   TextColor="Black"                       
                   Text="{Binding Identity, Mode=OneWayToSource}"
                   Placeholder="Driver ID"
                   Grid.Column="0"
                   Grid.ColumnSpan="2"
                   Grid.Row="1">
                        <Entry.Behaviors>
                            <behaviors:FormEventToCommandBehavior EventName="TextChanged" Command="{Binding TextEntryTrigger}"/>
                        </Entry.Behaviors>
                    </Entry>

                    <Label Text="OR" TextColor="Black"
                   Grid.Column="0"
                   Grid.ColumnSpan="2"
                   Grid.Row="2"
                    VerticalOptions="Center"
                    />

                    <Entry 
                   PlaceholderColor="Black"
                   TextColor="Black"                       
                   Text="{Binding Identity, Mode=OneWayToSource}"
                   Placeholder="Route ID"
                   Grid.Column="0"
                   Grid.ColumnSpan="2"
                   Grid.Row="3"
                    IsEnabled="{Binding RouteIDVis}"/>

ViewModel:

这些命令和属性设置在我刚刚将它们放在这里的正确位置。

public ICommand TextEntryTrigger { get; protected set; }

TextEntryTrigger = new Command(() => HandleEntryFieldVisibility());


public bool RouteIDVis
    {
        get { return _routeidvis; }
        set
        {
            _routeidvis = value;
            OnPropertyChanged(nameof(RouteIDVis));
        }
    }

    private void HandleEntryFieldVisibility()
    {
        RouteIDVis = false;
    }

我遗漏了要命令的事件的代码,因为正如我所说的那样,在所有这些中调试点时它们都被命中,我可以看到RouteIDVis被设置为false但它不会禁用第二个输入字段

我环顾四周,但我似乎无法找到一个直接的答案,只有一句话答案,没有正确的代码答案。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用

中的解决方案

https://forums.xamarin.com/discussion/71527/problem-with-binding-isenabled-property-of-an-entry

它使用2个Entry控件。第一个Entry控件被禁用,而第二个Entry控件被启用。 IsVisible确保只有一个控件可见。

<ContentView Grid.Row="0"
                   Grid.Column="1"
                   IsVisible="{Binding EntryEnabled}">
        <Entry IsEnabled="True"
               Text="{Binding PropertyValue, Mode=TwoWay}"/>
</ContentView>

<ContentView Grid.Row="0"
             Grid.Column="1"
              IsVisible="{Binding EntryEnabled, Converter={StaticResource InverseConverter}}">
        <Entry IsEnabled="False"
               Text="{Binding PropertyValue, Mode=TwoWay}"/>
</ContentView>

答案 1 :(得分:0)

<Entry Text="{Binding PropertyValue, Mode=TwoWay}"
       IsEnabled="False"/>

更改属性的顺序,这可能是一个问题。当将IsEnabled与按钮一起使用时,发生在我身上。