【问题标题】:xamarin form: text binding enum status converter issuexamarin 表单:文本绑定枚举状态转换器问题
【发布时间】:2018-02-21 15:05:08
【问题描述】:

我创建了一个按钮,它的内容绑定了一个状态,我初始化了状态,但是按钮内容不能显示相应的文字,在调试模式下,我发现它似乎执行了一个循环,得到状态后,执行转换函数,然后直接跳到ConvertBack(),再回到Convert()。

我在 xaml 文件中的代码是:

<ListView x:Name="myListView" ItemsSource="{Binding players}" HorizontalOptions="FillAndExpand" > 
      <ListView.ItemTemplate>
             <DataTemplate>
                   <ViewCell>
                       <Grid>                                                            
                           <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>                                                                                              
                                <ColumnDefinition Width="*"/>
                                 ...                                                                                                                                                                                 
                           </Grid.ColumnDefinitions>
                           <Button Grid.Column="0" Text="{Binding Status, Converter={StaticResource StatusToTextConverter}, Mode=TwoWay}" HorizontalOptions="CenterAndExpand"/>
                           <Button Grid.Column="1" Text="{Binding Status, Converter={StaticResource StatusToTextExConverter}, Mode=TwoWay}" HorizontalOptions="CenterAndExpand"/>
                           ...
                       </Grid>
                   </ViewCell>
             </DataTemplate>
      </ListView.ItemTemplate>

我的转换器是:

public class StatusToTextConverter: IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var status = (EStatus)value;

        if (status == EStatus.YES)
        {            
            return "V";
        }
        else
        {
            return "";
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        var text = (string)value;
        if (text == "V")
            return EStatus.YES;
        else
            return EStatus.NO;
    }

    #endregion
}

【问题讨论】:

    标签: wpf xamarin converter


    【解决方案1】:

    可能是 TwoWay 的绑定模式导致了循环。

    你需要一种方法来打破它。

    在它绑定的视图模型属性中,检查新值是否与旧值相同,如果不同则只更改设置属性。

    【讨论】:

    • 感谢您的回复,我更改了 TwoWay 模式,并使用其他解决方法,现在可以了。
    • 请同时在此处标记一个答案为正确答案。
    【解决方案2】:

    从 Convert Back 中删除实现

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2011-10-02
      • 2015-07-12
      • 1970-01-01
      相关资源
      最近更新 更多