2014-02-14 64 views
0

要顯示Telerik:RadGridView上的項目,通常我使用DataContext="{Binding [someViewModel]}"ItemSource="{Binding objectList, Mode=TwoWay}"WPF如何從相同viewmodel訪問其他變量?

和我的專欄我將訪問objectfield。整體畫面就會像下面的東西:

<telerik:RadGridView DataContext="{Binding [someViewModel]}" 
    ItemSource="{Binding objectList, Mode=TwoWay}"> 

    <telerik:RadGridView.Columns> 
      <telerik:GridViewDataColumn> 
       <telerik:GridViewDataColumn.CellTemplate> 
        <DataTemplate> 
         <CheckBox IsEnabled="{Binding enabledVar}" 
          IsChecked="{Binding isChecked, Mode=Twoway}" 
        </DataTemplate> 
       </telerik:GridViewDataColumn.CellTemplate> 

      </telerik:GridViewDataColumn> 
    </telerik:RadGridView.Columns> 

</telerik:RadGridView> 

想象還會有objectList 10個項目。 objectList中的每個項目都將具有變量isChecked,該變量用於操縱複選框IsChecked屬性。

我有另一個變量在同一個視圖模型名爲enabledVar其中控制十個複選框IsEnabled屬性。 enabledVar不是objectList的一部分,但我無法獲得價值。我可以知道如何處理這種情況嗎?

更新:

,我發現了一些新的發展方向,但不知道是否有幫助。

<CheckBox IsEnabled="{Binding enabledVar, 
    RelativeSource={RelativeSource Mode=FindAncestor, 
    AncestorType=telerik:RadGridView}}" 

但當然,仍然失敗。

任何幫助將非常感激。

回答

1

如果使用祖先你要綁定到的DataContext

<CheckBox IsEnabled="{Binding Path=DataContext.enabledVar, 
    RelativeSource={RelativeSource Mode=FindAncestor, 
    AncestorType=telerik:RadGridView}}" 

另一種形式給出可能是使用元素綁定集名稱

<telerik:RadGridView x:Name="myGrid" ... 

然後在celltemplate綁定到它

<CheckBox IsEnabled="{Binding Path=DataContext.enabledVar, ElementName=myGrid}" 

希望這會有所幫助。

0

在Update中建議的代碼將不起作用,因爲GridViewDataColumn不是Visual樹的一部分,因此無法訪問DataContext。

您將不得不使用代理數據綁定,如建議的here。您可以通過搜索「wpf代理數據綁定」來獲得更多示例。