2015-06-12 106 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