簡體   English   中英

BindingContext在ViewModel中不訪問獲取方法

[英]BindingContext doesn't access getters in ViewModel

我有一個viewModel,它鏈接到具有BindingContext的視圖。

BindingContext = viewModelTest;

在我的ViewModel中,我做了一個自定義的吸氣劑,目的是獲取測試項目列表。

public class viewModelTest: INotifyPropertyChanged
{
    public List<string> partners
    {
        get
        {
            List<string> _partners = new List<string>() { "test1", "test2", "test3", "test3" };
            return _partners;
        }
    }
    public List<string> partnersTwo
    {
        get
        {
            List<string> _partners2 = new List<string>() { "test4", "test5", "test6", "test7" };
            return _partners;
        }
    }
}

這是以下xaml:

<CarouselView>
    <CarouselView.ItemsLayout>
        <GridItemsLayout/>
            </CarouselView.ItemsLayout>
                <CarouselView.ItemTemplate>
                    <DataTemplate>
                        <Frame>
                            <Label Text="{Binding partners}"/>
                            <Label Text="{Binding partnersTwo}"/>
                        </Frame>
                    </DataTemplate>
    </CarouselView.ItemTemplate>
</CarouselView>

從上面的代碼,我無法訪問我的getter {Binding partners}

僅當我將BindingContext更改為以下內容時才有可能:

BindingContext = viewModelTest.partners; 

這自然是不希望的,因為我希望能夠將多個參數傳遞給我的視圖,即partnersTwo。

因此,如何從ViewModelTest在xaml文件中進行單獨的綁定?

嘗試這個 :

<CarouselView ItemSource="{Binding partners}">
    <CarouselView.ItemsLayout>
        <GridItemsLayout/>
            </CarouselView.ItemsLayout>
                <CarouselView.ItemTemplate>
                    <DataTemplate>
                        <Frame>
                            <Label Text="{Binding}"/>
                        </Frame>
                    </DataTemplate>
    </CarouselView.ItemTemplate>
</CarouselView>

您可以定義一個model並將控件的所有值(例如標簽的文本或按鈕的背景色)綁定到它的屬性。

XAML

<CarouselView ItemSource="{Binding MyItems}">
   <CarouselView.ItemsLayout>
        <GridItemsLayout/>
            </CarouselView.ItemsLayout>
                <CarouselView.ItemTemplate>
                    <DataTemplate>
                        <Frame>
                            <Label Text="{Binding Title}"/>
                            <Label Text="{Binding Subtitle}"/>
                        </Frame>
                    </DataTemplate>
    </CarouselView.ItemTemplate>
</CarouselView>

背后的代碼

public class ViewModelTest : INotifyPropertyChanged
{

   public event PropertyChangedEventHandler PropertyChanged;

   public ObservableCollection<Model> MyItems { get; set; }

   public ViewModelTest()
   {
      MyItems = new ObservableCollection<Model>() {

         new Model(){Title="Test1" ,Subtitle="Test6" },
         new Model(){Title="Test2" ,Subtitle="Test7" },
         new Model(){Title="Test3" ,Subtitle="Test8" },
         new Model(){Title="Test4" ,Subtitle="Test9" },
         new Model(){Title="Test5" ,Subtitle="Test10" },
     };
    }
}

public class Model
{
   public string Title { get; set; }
   public string Subtitle { get; set; }
}

嘗試這個:

Label="{Binding Source={x:Reference Name=myPage}, Path=BindingContext.DataContext.partners}"

其中: myPagemyPage的名稱(是的,您需要命名頁面)

此處僅提供旁注:“文本屬性”為“字符串”類型。 您正在返回字符串列表。 考慮將字符串列表轉換為一個字符串並將其返回到屬性...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM