2016-02-13 39 views
1

我在我的應用程序中有一個項目集合,我想將ContentContentPresenter設置爲這些項目之一。該項目將由int索引隨機定義。我可以綁定一個項目是這樣的:裝訂索引器

<ContentPresenter Content={Binding Items[0]}/> 

但不是這樣的:

<ContentPresenter Content={Binding Items[{Binding Index}]}/> 

我已經看到了一些答案在WPF使用MultiBinding暗示的,但是這是不具備的UWP。有其他選擇嗎?

回答

1

您可以創建一個視圖模型屬性,返回Items[Index]

public string RandomItem => Items[Index]; 

PropertyChanged通知工作,你將需要提高的情況下,只要IndexItems的變化,例如:

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>