i创建一个按钮,其内容绑定状态,我初始化状态,但是按钮内容无法显示相应的文本,在调试模式下,我发现它似乎是执行的循环获得状态后,执行转换函数,然后直接跳至转换式(),然后再次返回转换()。
我在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
}
可能是引起循环的双重绑定模式。
您需要一种打破它的方法。
在其义务的视图模型属性中,检查新值是否与旧值相同,并且仅设置属性,则如果不同的属性更改。
从转换后删除实现