2011-09-26 64 views
2

我正在構建一個簡單的windown電話7頁。我正在做MVVM(使用MVVM光源)並將List<Category>類型屬性綁定到ListPicker。這家酒店是在一個名爲AddExpenseViewModel像一個視圖模型定義如下ListPicker不適用於MVVM Light

public class AddExpenseViewModel:ViewModelBase 
{ 
    public List<Category> Categories 
    { 
     get { return categories; } 
     set 
     { 
      categories = value; 
      RaisePropertyChanged("Categories"); 
     } 
    } 
} 

Category類定義爲

public class Category 
{ 
    public string Name { get; set; } 
} 

在我的XAML我首先定義一個資源爲

<UserControl.Resources> <bs:ViewModelLocator x:Key="ViewModelLocator" /> </UserControl.Resources>

然後將包含ListPicker的網格的DataContext設置爲

<Grid x:Name="ContentPanel" 
       Grid.Row="1" 
       Margin="13,1,11,-1" 
       DataContext="{Binding Path=AddExpenseViewModel, 
            Source={StaticResource ViewModelLocator}}"> 

這裏是我的ListPicker

<toolkit:ListPicker 
      HorizontalAlignment="Left" 
      Height="50" 
      Width="200" 
      Grid.Row="2" 
      Grid.Column="1" 
      DataContext="{Binding AddExpenseViewModel}" 
      ItemsSource="{Binding Path=Categories, Mode=OneWay}" > 
      <toolkit:ListPicker.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Border Background="LightGreen" Width="*" Height="*"> 
          <TextBlock Text="{Binding Name}"></TextBlock> 
         </Border> 
        </StackPanel> 
       </DataTemplate> 
      </toolkit:ListPicker.ItemTemplate> 
</toolkit:ListPicker>` 

這不起作用XAML。 ListPicker總是空的。我在這裏做錯了什麼?

回答

1

我得到這個很多消防的工作後,我應該使用一個TwoWay結合了ListPicker。這是我改變得到這個工作

我介紹了一個新的類,如下

public class Categories : ObservableCollection<Category> 
{ 
} 

然後,我改變了我的AddExpenseViewModel屬性分類如下

public Categories Categories 
{ 
    get { return categories; } 
    set 
    { 
     categories = value; 
     RaisePropertyChanged("Categories"); 
    } 
} 
private Categories categories; 

然後,我改變了ItemsSource listpicker as

ItemsSource="{Binding Path=Categories}" 

這讓它工作。

1

運行應用程序時是否在輸出中看到任何Xaml綁定錯誤?

如果您正在父元素(您的網格)上執行此操作,您也不應該在ListPicker上綁定DataContext。這可能是你的問題,但綁定錯誤應該提供一些詳細信息。

+0

我看到輸出窗口中的綁定錯誤,但這並沒有什麼幫助。如果我刪除了ListPicker的DataContext,那麼我得到一個類型爲MS.Internal.WrappedException並帶有「0x8000ffff」作爲消息的異常。我正在更新有關更多詳細信息的問題。 – Suhas

+0

你可以發佈你在綁定窗口中看到的消息嗎?它通常解釋什麼是財產失敗和如何。 – jonathanpeppers

+0

我的問題已修復。我已經更新了這個問題的詳細信息 – Suhas

0

讓您的資源的密鑰與類型相同可能是問題。您可以更改案例或完全重命名。

嘗試:

<bs:ViewModelLocator x:Key="locator" /> 

DataContext="{Binding AddExpenseViewModel, Source={StaticResource locator}}" 

你也應該不會需要設置網格的DataContext和ListPicker以同樣的事情。如果你只在ListPicker中使用VML,我也不會在網格中設置它。

,因爲它需要跟蹤選定的項目

+0

如果我刪除了ListPicker的DataContext,那麼我得到一個異常類型MS.Internal.WrappedException與「0x8000ffff」作爲消息。我正在更新有關更多詳細信息的問題。 – Suhas

+0

我找到了這個錯誤的原因。它與數據綁定沒有任何關係。 ItemTemplate中的邊框將高度和寬度設置爲「*」。將其更改爲「Auto」後,異常消失 – Suhas