2015-06-12 73 views
1

有没有人有任何关于如何解决我的问题的建议?我有一个数据网格绑定到ModelCheckoutRecord对象集合(ListModelCheckoutRecords)。我将所选项绑定到ModelCheckoutRecordSelectedItemModelCheckoutRecord)。在所选项目的绑定中,我想更新另一个数据网格和网格分隔器的可见性绑定(ResponseVisibility)。更新来自其他绑定的绑定的能力似乎不起作用?是使用MVVM中的其他绑定更新WPF中的绑定

这个我的XAML行,如下所示:

  <Grid> 
       <Grid.RowDefinitions> 
        <View:RowDefinitionExtended Height="Auto"/> 
        <RowDefinition Height="Auto"/> 
        <RowDefinition Height="Auto"/> 
       </Grid.RowDefinitions> 
       <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding ListModelCheckoutRecord}" SelectedItem="{Binding SelectedModelCheckoutRecord}" MouseLeftButtonDown="DataGrid_MouseLeftButtonDown" CommandManager.PreviewExecuted="DataGrid_DeletePreviewExecuted" IsReadOnly="False" CanUserAddRows="False" CanUserDeleteRows="True" Margin="15" Grid.Row="0"/> 
       <GridSplitter HorizontalAlignment="Stretch" Visibility="{Binding ResponseVisibility}" Grid.Row="1"/> 
       <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding ListModelResponseRecord}" SelectedItem="{Binding SelectedModelResponseRecord}" MouseLeftButtonDown="DataGrid_MouseLeftButtonDown" IsReadOnly="False" CanUserAddRows="False" CanUserDeleteRows="False" Visibility="{Binding ResponseVisibility}" Margin="15" Grid.Row="2"/> 
      </Grid> 

害我麻烦的精简代码如下:

private Visibility responseVisibility = Visibility.Visible; 
    public Visibility ResponseVisibility 
    { 
     get { return responseVisibility; } 
     set 
     { 
      if (value == responseVisibility) 
      { 
       return; 
      } 

      responseVisibility = value; 
      RaisePropertyChanged("ResponseVisibility"); 
     } 
    } 

    private List<ModelCheckoutRecord> listModelCheckoutRecord; 
    public List<ModelCheckoutRecord> ListModelCheckoutRecord 
    { 
     get { return listModelCheckoutRecord; } 
     set 
     { 
      if (value == listModelCheckoutRecord) 
      { 
       return; 
      } 

      listModelCheckoutRecord = value; 
      RaisePropertyChanged("ListModelCheckoutRecord"); 

      ResponseVisibility = Visibility.Collapsed; 
     } 
    } 

    private ModelCheckoutRecord selectedModelCheckoutRecord; 
    public ModelCheckoutRecord SelectedModelCheckoutRecord 
    { 
     get { return selectedModelCheckoutRecord; } 
     set 
     { 
      if (value == null) 
      { 
       ResponseVisibility = Visibility.Collapsed; 
       return; 
      } 

      else 
      { 
       ResponseVisibility = Visibility.Visible; 
      } 

      if (selectedModelCheckoutRecord == value) 
      { 
       return; 
      } 

      RaisePropertyChanged("SelectedModelCheckoutRecord"); 
     } 
    } 

感谢

理查德

+0

在你的'SelectedModelCheckoutRecord',要设置'ResponseVisibility '根据所选项目是否为空。在这种情况下,它可能永远不会为空,所以可见性总是**可见。重新思考你的逻辑。 –

回答

2

假设你真正想要在的情况下具有崩溃的可视性只有10 SelectedItem,真的没有必要为此使用代码。以下XAML将很好地完成这项工作。

只要给你的源数据网格的名称(我假定电网姓名在下面的例子中),并使用样式在目标的DataGrid这样的:

<DataGrid x:Name="TargetGridJustToShowWhereThisGoes"> 
    <DataGrid.Style> 
     <Style TargetType="DataGrid"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=Grid, Path=SelectedItem}" Value="{x:Null}"> 
        <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Style> 
</DataGrid> 
+0

感谢Maverik的代码工作正常。我之前在其他场景中遇到过这个问题 - 试图从其他绑定中更改不同的元素绑定 - 以供将来参考。 –

+0

只要您可以考虑触发器值(仅等效)和依赖性属性来设置该触发器,则可以使用上述模式。 – Maverik