2013-07-09 38 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控件为命令参数,尤其是需要到当地范围之外去,因为你在这里做什么。它现在设置的方式是非常紧密的耦合。

相关问题