Вы можете создать свойство вид модели, возвращая Items[Index]
:
public string RandomItem => Items[Index];
Для PropertyChanged
уведомлений на работу, вам нужно будет поднять событие, когда Index
или Items
изменения, например:
public int Index
{
get { return _index; }
set
{
_index = value;
RaisePropertyChanged();
RaisePropertyChanged(() => RandomItem);
}
}
Если вы предпочитаете иметь логику в представлении и переходите к многосвязному способу, вы можете использовать Cimbalino toolkit. Для того, чтобы работать, сначала добавьте 2 пакета NuGet:
Теперь вы можете создать конвертер:
public class CollectionIndexConverter : MultiValueConverterBase
{
public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var collection = (IList) values[0];
var index = (int?) values[1];
return index.HasValue ? collection[index.Value] : null;
}
public override object[] ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException();
}
}
И использовать его из XAML:
<ContentPresenter>
<interactivity:Interaction.Behaviors>
<behaviors:MultiBindingBehavior PropertyName="Content" Converter="{StaticResource CollectionIndexConverter}">
<behaviors:MultiBindingItem Value="{Binding Items}" />
<behaviors:MultiBindingItem Value="{Binding Index}" />
</behaviors:MultiBindingBehavior>
</interactivity:Interaction.Behaviors>
</ContentPresenter>