我有社交媒體在ObservableCollectionRange的集合,我初始化如下:如何將Observable Collection的Item屬性綁定到Switch狀態?
public ObservableRangeCollection<SocialMediaEntity> CurrentSocialMedia { get; } = new ObservableRangeCollection<SocialMediaEntity>();
下面我獲得的網絡服務列表,然後我把這些元素集合中:
GetSonInformation().Subscribe((SonInformation) =>
{
CurrentSon = SonInformation.Son;
CurrentSocialMedia.ReplaceRange(SonInformation.SocialMedia);
});
在頁面上,如果令牌有效,並且如果令牌無效或者集合中沒有這樣的社交媒體,那麼我希望啓用一個切換組件。
<Switch Grid.Column="1"
VerticalOptions="Center"
HorizontalOptions="End"
IsToggled="{Binding Path=CurrentSocialMedia,
Converter={StaticResource SocialMediaStatusToBoolConverter},
ConverterParameter={StaticResource youtubeKey}}">
<Switch.Behaviors>
<behaviors:EventHandlerBehavior EventName="Toggled">
<behaviors:InvokeCommandAction
Command="{Binding ToggleYoutubeSocialMediaCommand}"
Converter="{StaticResource SwitchChangeEventArgsConverter}"/>
</behaviors:EventHandlerBehavior>
</Switch.Behaviors>
</Switch>
我遵循的方法是鏈接集合並使用一個轉換器,它返回一個布爾值與我之前提到的邏輯。
public class SocialMediaStatusToBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
IList<SocialMediaEntity> SocialMedias = (IList<SocialMediaEntity>)value;
if (SocialMedias == null || SocialMedias.Count() == 0)
return false;
var socialMedia = SocialMedias.SingleOrDefault(social => social.Type.Equals((string)parameter));
return socialMedia != null && !socialMedia.InvalidToken;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
問題是這只是第一次完成。當我通過更換所有項目或添加另一個項目來更新集合時,什麼都不更新。
任何人都可以告訴我我應該採取什麼方法來做到這一點?提前致謝。