2011-07-05 2 views
3

저는 프리즘, MVVM 패턴 및 MEF를 광범위하게 사용하는 Silverlight 응용 프로그램을 작성하고 있습니다. 몇 가지 이유로 뷰 우선 접근 방식을 선택했습니다.DataGridTemplateColumn의 명령 바인딩

뷰 중 하나에는 DataGrid가 있으며이 그리드의 열 중 하나는 버튼이있는 DataGridTemplateColumn입니다.

Button에 Command와 CommandParameter를 정의하고 싶습니다. Command는 ViewModel의 DelegateCommand 여야합니다. CommandParameter는 DataGrid에서 바로 나오는 SelectedItems 목록이어야합니다.

이렇게하려면 여러 가지 방법을 시도했지만 Command 또는 CommandParameter가 null입니다.

<sdk:DataGridTemplateColumn> 
    <sdk:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <Button Width="15" Height="15" Content=">" 
        Command="{Binding UpdateSearchParametersCommand}" 
        CommandParameter="{Binding SelectedItems, ElementName=dataGrid}"> 
     </DataTemplate> 
    </sdk:DataGridTemplateColumn.CellTemplate> 
</sdk:DataGridTemplateColumn> 

누군가 그것이 가야하는 것을 최선의 방법에 저를 조언 할 수 :

는 내가 처음 쓴 코드를 다음?

미리 감사드립니다. Gianluca.

답변

0

에 지점을 변경해야합니다. 고마워요. 제공된 답변은 대부분 WPF와 관련이 있습니다. 이 같은 응용 프로그램의 다른 지점에서 온다,

<helpers:BindingHelper.Binding> 
<helpers:BindingList> 
    <helpers:RelativeSourceBinding TargetProperty="Command" Path="DataContext.ToggleDataArchiveInheritanceCommand" RelativeMode="FindAncestor" AncestorType="ChildWindow" /> 
</helpers:BindingList> 
</helpers:BindingHelper.Binding> 

좋아,하지만 원칙은 동일합니다 : 여기

내가 문제를 해결 한 방법이다. a에서 바인딩을 정의한 경우 Silverlight에서 일반적으로 범위를 벗어난 다른 요소 (DataTemplate의 일부가 아니므로)에 도달하는 유일한 방법은 xaml 개체 트리를 탐색하는 것입니다. 이것이 BindingHelper의 기능입니다.

정보를 다른 사람에게 유용하게 사용하시기 바랍니다.

건배,

지안루카

+0

Ciao Gianluca, this for 게시 ...이 똑같은 일을하려하지만 "BindingHelper"가 무엇인지 확실하지 않습니다. 여기에 더 많은 코드가 있습니까? 아니면 Silverlight에서 BindingHelper를 사용하고 있습니까? –

+0

안녕하세요. 당신이 옳습니다. 더 많은 코드가 있습니다. 이것은 매우 간단합니다. 그리고 이전에이 단어에서 설명한 것과 똑같습니다. 나는 내가 만든 헬퍼 클래스를 복사하여 붙이기 위해 2011 년에 작업하고 있던 소스 코드를 찾아야 할 것이다. 지금 환호. 지. –

+0

여기에서 소스를 찾을 수 있습니다. http://snipt.org/ujph9 –

1

ItemsSource를 사용하여 DataGrid를 바인딩하면 Command 및 CommandParameter 바인딩이 작성한 방식과 현재 항목에 연결됩니다.

이 경우 대체 소스를 사용해야합니다. 명령은 DataContext.UpdateSearchParametersCommand 및 CommandParameter - DataContext.SelectedItems에 바인드되어야합니다.

귀하의 경우 UpdateSearchParametersCommand도 SelectedItems도 바인드 된 항목에서 찾을 수 없습니다.

는 조상에 적합한 유형을 설정해야합니다

업데이트되었습니다. 나는 창으로 설정했지만 UserControl을 사용하고있을 수도 있습니다.

<sdk:DataGridTemplateColumn> 
<sdk:DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Button Width="15" Height="15" Content=">" 
       Command="{Binding Path=DataContext.UpdateSearchParametersCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" 
       CommandParameter="{Binding Path=DataContext.SelectedItems, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"> 
    </DataTemplate> 
</sdk:DataGridTemplateColumn.CellTemplate> 

+0

단추가 가져야하는 xaml을 포함하여이 대답이 향상되었습니다. – AnthonyWJones

+0

@AnthonyWJones 맞습니다. – 26071986

+0

@ 26071986 : 답장을 보내 주셔서 감사합니다. 그러나 당신의 솔루션에서 Window 타입의 Ancestor를 찾았습니다. 나는 완전히 틀릴 수도 있지만, 내가 아는 한 Silverlight에서 지원되지 않습니다. 맞습니까? –

6

현재 바인딩 DataGridRowItem.UpdateSearchParametersCommand를 가리키고 있습니다. 당신은 당신의 대부분이 나를 도와 시도 DataGrid.DataContext.UpdateSearchParametersCommand

<sdk:DataGrid x:Name=dataGrid> 
    <sdk:DataGridTemplateColumn> 
     <sdk:DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <Button Width="15" Height="15" Content=">" 
         Command="{Binding DataContext.UpdateSearchParametersCommand, ElementName=dataGrid}" 
         CommandParameter="{Binding SelectedItems, ElementName=dataGrid}"> 
      </DataTemplate> 
     </sdk:DataGridTemplateColumn.CellTemplate> 
    </sdk:DataGridTemplateColumn> 
</sdk:DataGrid> 
1

실버 5에서이

<Button Command="{Binding Path=DataContext.PreviewPublishCommand, RelativeSource={RelativeSource AncestorType=controls:ChildWindow}}" Content="Publish" /> 

은 그냥 최상위 요소 (UserControl을, ChildWindow 등) 무엇이든 할 AncestorType를 조정 할 수 있습니다.

관련 문제