2013-12-12 110 views
0

我有以下問題:我需要在下面的代碼中添加什麼來告訴我的RadioButton綁定到連接到datagrid項目的「IsFacturation」布爾值?我使用DataTrigger來定義自己綁定到datagrid只讀狀態,所以我需要通過查看合適的父級來「綁定」綁定定義。我認爲我必須玩RelativeSource ...WPF控件綁定到DataTrigger之前的綁定之前的綁定

我注意到,當一個數據網格項目的IsFacturation布爾值設置爲true時,單選按鈕不會按原樣檢查。

DataGrid項目是「Adresse」對象的可觀察集合,它定義了「IsFacturation」屬性。

<DataGrid x:Name="AddressGrid" SelectionUnit="Cell" ItemsSource="{Binding Path=Adresses}" SelectionMode="Single"> 
     <DataGrid.Columns> 
       <!-- Region Facturation --> 
      <DataGridTemplateColumn Header="Facturation" SortMemberPath="IsFacturation" HeaderStyle="{StaticResource CenterAlignmentColumnHeaderStyle}" > 
       <DataGridTemplateColumn.CellTemplate > 
        <DataTemplate> 
         <ContentControl> 
          <ContentControl.Style> 
           <Style TargetType="{x:Type ContentControl}"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="True"> 
              <Setter Property="ContentTemplate"> 
               <Setter.Value> 
                <!-- Possibly create another contentcontrol which differentiates between errors --> 
                <DataTemplate> 
                 <Image Source="Resources/Images/Check-icon.png" Visibility="Visible"/> 
                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             </DataTrigger> 
             <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="False"> 
              <Setter Property="ContentTemplate"> 
               <Setter.Value> 
                <DataTemplate> 
                 <RadioButton GroupName="grpRadioButtonFacturationAddresses" 
                  IsChecked="{Binding Path=IsFacturation, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center" Visibility="Visible"/> 
                </DataTemplate> 
               </Setter.Value> 
              </Setter> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </ContentControl.Style> 
         </ContentControl> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

這樣的代碼的目標是當數據網格爲只讀以顯示圖像,而當它不是一個單選按鈕。我仍然需要處理圖像可見性(簡單),但單選按鈕狀態直接鏈接到我選擇的datagrid項目屬性。

非常感謝

+1

嘗試'「{綁定路徑= IsFacturation,UpdateSourceTrigger =的PropertyChanged,模式=雙向}」'而不是如果您希望值立即更新。您在列中使用「ContentControl」的目的是什麼?除了浪費資源外,它什麼都不做 – Sheridan

+0

所以我有不必要的代碼來使用我的兩個數據觸發器?什麼是相關的代碼來實現相同的行爲?感謝您指出這一點。對不起,它不適用於'UpdateSourceTrigger = PropertyChanged',這很奇怪。 –

回答

0

這只是回答您的評論,而不是你的問題。你可以使用DataTrigger•不用一個ContentControl一種方法是將它們移動到實際控制:

<DataTemplate> 
    <Grid> 
     <Image Source="Resources/Images/Check-icon.png" Visibility="Visible"> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
        <Setter Visibility="Collapsed" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="True"> 
          <Setter Property="Visibility" Value="Visible"> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
     </Image> 
     <RadioButton GroupName="grpRadioButtonFacturationAddresses" IsChecked="{Binding Path=IsFacturation, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" VerticalAlignment="Center" HorizontalAlignment="Center"> 
      <RadioButton.Style> 
       <Style TargetType="{x:Type RadioButton}"> 
        <Setter Visibility="Visible" /> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=AddressGrid,Path=IsReadOnly}" Value="True"> 
          <Setter Property="Visibility" Value="Collapsed"> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RadioButton.Style> 
     </RadioButton> 
    </Grid> 
</DataTemplate> 
+0

不客氣。我看到您將數據觸發器設置爲控件樣式,而我們的方式是在樣式數據觸發器中設置控件。執行時間和資源使用情況最好的是什麼?我相信我們的方式可能會節省資源,而您的執行速度更快? –

+1

在我的示例中,我剛剛將'Hidden'值更改爲'Collapsed',因爲它的效率稍高。將DataTrigger移到控件的主要原因是因爲這就是他們應該在的位置......想到這樣的觸發器:*當某事發生時,控件會改變它自己的值*。當你開始嘗試改變託管'Trigger'的控件之外的屬性時,你可能遇到問題......它可能是可能的,但不可取。順便說一句,你爲什麼認爲你的方法會節省資源?您在每一行中都爲「ContentControl」使用了額外的資源。 – Sheridan

0

我想我找到了問題的原因。

我禁止了ContentControl和我現在工作的單選按鈕的綁定。

編輯:哦,我還沒有看到你的迴應謝里登:)