2011-01-25 108 views
0

我有兩個類和一個用戶控件。用戶控件中的itemsControl的WPF數據綁定問題

class pvalue 
{ 
    public string value; 
    public bool selected; 
    public pvalue(string v, bool s) 
    { 
     value = v; 
     selected = s; 
    } 
} 

class param 
{ 
    public string name { get; set; } 
    public string prefix { get; set; } 
    public IList<pvalue> values { get; set; } 

    public param(string _name, string _prefix, IList<pvalue> _values) 
    { 
     name = _name; 
     prefix = _prefix; 
     values = _values; 
    } 
} 


<UserControl DataContext="{Binding param}" > 
<Grid>... 
    <ItemsControl x:Name="itemctl" ItemsSource="{Binding Path=values}"> 
    ... 
     <ItemsControl.ItemTemplate> 
      <DataTemplate> 
       <ToggleButton IsChecked="{Binding Path=selected}"> 
        <TextBlock Text="{Binding Path=value}" /> 
       </ToggleButton> 
      </DataTemplate>    
     </ItemsControl.ItemTemplate> 
    </ItemsControl> 
</Grid> 
</UserControl> 

我的意圖是在應用程序中創建類,並將其設置爲usercontrol的datacontext。但我對WPF很陌生,這有點凌駕於我的頭上。數據綁定不起作用 - 「BindingExpression路徑錯誤:在'object'''pvalue''上找不到'value'屬性。

我可以得到一些幫助,爲usercontrol分揀數據綁定嗎?非常感謝。

回答

0

包含在用戶控件定義您的解決方案命名空間,然後有這樣的

<UserControl.Resources> <param:SolutionName x:key="Param" /> </UserControl.Resources>

在資源類的資源,那麼修改代碼,就像下面

<UserControl DataContext="{Binding param}" > <Grid>... <ItemsControl x:Name="itemctl" ItemsSource="{Binding Source="{StaticResource Param}"> ... <ItemsControl.ItemTemplate> <DataTemplate> <ToggleButton IsChecked="{Binding Path=selected}"> <TextBlock Text="{Binding Path=value}" /> </ToggleButton> </DataTemplate>
</ItemsControl.ItemTemplate> </ItemsControl> </Grid> </UserControl>

希望它有幫助

0

似乎有幾件事錯在這裏:

  • 你應該結合性(與getter和setter),而不是字段,因此改變你的公共領域在您的p值類型的屬性。
  • 如果你想時,在界面的屬性值改變爲更新,看看實現你的P值和param類型INotifyPropertyChanged
  • 我會用PascalCase爲您的類名和屬性
  • 從參數名稱
  • 刪除下劃線
  • 使您的pvalue參數名稱更具描述性
  • 您正在將UserControl的DataContext綁定到類似名稱(param)的樣子,您是如何讓usercontrol獲取您的param類型的實例的?通常,您可以將它作爲您的usercontrol的依賴項屬性,然後當您使用該控件時,可以將您的usercontrol的Param依賴項屬性綁定到返回當前DataContext上的參數類型實例的屬性(通常爲ViewModel if使用MVVM)
+0

謝謝,好點。在我修復了類pvalue的屬性聲明之後,測試用例實際上正在工作。 –