2013-07-09 68 views
0

我必須通過GridControl的CommandParameter進行佈局的序列化。綁定到來自子項userName的ElementName

我的按鈕來執行該命令是在一個孩子usercontrol。

我成功使用RelativeSource訪問包含GridControl的網格。

編輯: 此按鈕位於名爲GridSettings.xaml的用戶控件中。這是Grid.xaml的一個孩子。

<Button Content="Save Defaults" Command="{Binding SaveDefaultsCommand}" Width="90" CommandParameter="{Binding Path=gridControl1, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=2}}"/> 

這是Grid.xaml父視圖的相關部分。

   <Grid Grid.Row="1" x:Name="GridView"> 
       <dxg:GridControl x:Name="gridControl1" ItemsSource="{Binding WeldReports}" AutoPopulateColumns="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > 
        <i:Interaction.Triggers> 
         <i:EventTrigger EventName="Loaded"> 
          <Custom:EventToCommand Command="{Binding GridLoadedCommand}"/> 
         </i:EventTrigger> 
        </i:Interaction.Triggers> 
        <dxg:GridControl.View> 
         <dxg:TableView Name="tableView1" ShowTotalSummary="True" /> 
        </dxg:GridControl.View> 
       </dxg:GridControl> 
      </Grid> 

錯誤,我得到:在 '對象' '' 網格 '(名稱= '的GridView')' 找不到 'gridControl1' 屬性: System.Windows.Data錯誤:40:BindingExpression路徑錯誤。 BindingExpression:路徑= gridControl1; DataItem ='Grid'(Name ='GridView');目標元素是'Button'(Name ='');目標屬性是'CommandParameter'(類型'對象')

Path = gridControl1應該是ElementName = gridControl1 ...但是ElementName不能用於RelativeSource ...所以我讀了。

+0

請分享您的Xaml的gridview – saamorim

+0

我複製了代碼,但忘了粘貼到問題中。用xaml編輯的原始問題。 – faldeland

回答

0

PathBinding需要代表一個屬性。您可以爲GridControl創建此項,方法是向Grid.xaml.cs添加一個包裝屬性,該屬性僅返回已爲您創建的gridControl1字段,因爲在XAML中設置了x:Name

public object MyGridControl 
{ 
    get { return gridControl1; } 
} 

CommandParameter="{Binding Path=MyGridControl, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=2}}" 

你也應該考慮嘗試調整你的應用程序,以避免需要通過UI控件爲命令參數,尤其是需要到當地範圍之外去,因爲你在這裏做什麼。它現在設置的方式是非常緊密的耦合。

相關問題