2016-10-19 41 views
0

我在WPF中比較新,我的XAML文件仍然更復雜和混亂,因爲一些代碼經常重複。有沒有簡單的方法來讓代碼看起來更好更短?例如,我有一個DataGrid,其中DataGridColumnTemplate始終是相同的,只有它的數據源和標題名稱不同。如何避免在WPF中重複樣式

<DataGridTemplateColumn Header="Web"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="auto" /> 
           <ColumnDefinition Width="auto" /> 
          </Grid.ColumnDefinitions> 
          <CheckBox Grid.Column="0" Margin="4,0" IsChecked="{Binding Webs.IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
           <CheckBox.Style> 
            <Style TargetType="CheckBox"> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding Webs}" Value="{x:Null}"> 
               <Setter Property="IsEnabled" Value="false"></Setter> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </CheckBox.Style> 
          </CheckBox> 
          <Button Grid.Column="1" Content="Detail" Margin="3,1" /> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

      <DataGridTemplateColumn Header="Flange"> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="auto" /> 
           <ColumnDefinition Width="auto" /> 
          </Grid.ColumnDefinitions> 
          <CheckBox Grid.Column="0" Margin="4,0" IsChecked="{Binding Flanges.IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> 
           <CheckBox.Style> 
            <Style TargetType="CheckBox"> 
             <Style.Triggers> 
              <DataTrigger Binding="{Binding Flanges}" Value="{x:Null}"> 
               <Setter Property="IsEnabled" Value="false"></Setter> 
              </DataTrigger> 
             </Style.Triggers> 
            </Style> 
           </CheckBox.Style> 
          </CheckBox> 
          <Button Grid.Column="1" Content="Detail" Margin="3,1" /> 
         </Grid> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 
+0

最好的,你可以在這裏做是內'CellTemplate'到'Resources'改變你的'DataTemplate'。 – AnjumSKhan

回答

0
在您的具體情況

,當null值應禁用控制,有直接綁定IsEnabled,依靠TargetNullValue更換null小號

<CheckBox Grid.Column="0" Margin="4,0" 
      IsChecked="{Binding Flanges.IsSelected,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
      IsEnabled="{Binding Path=Flanges, TargetNullValue=false}"/> 

然而,這會產生一些有約束力的錯誤時,猛然劈property is not null

「BindingExpression產生的值對目標屬性無效,target元素爲'CheckBox';目標屬性爲'IsEna布萊德「(類型'布爾')」

它使有意識有一個專門的價值轉賬檢查null並將其用於綁定。它比寫一個DataTrigger短得多

IsEnabled="{Binding Path=Flanges, Converter={StaticResource IsNullConverter}}" 

另見相關的問題:Null To Boolean IValueConverter not working