2016-05-20 48 views
2

我正在WPF MVVM中开发一个应用程序。我希望宽度属性,转换器或*自动返回。我的转换器返回良好的价值,但无济于事。在这里,我转换XAML IMultiValueConverter宽度自动或*

class FicheWidthVisibilityConverter : IMultiValueConverter 
{ 
    int SizeDatagrid = 0; 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 

     var VisibilityFiche = (Visibility)values[1]; 
     var NewSizeDataGrid = System.Convert.ToInt32(values[0]); 

     //Récupère la taille AUTO du datagrid 
     if (SizeDatagrid == 0) 
      SizeDatagrid = NewSizeDataGrid; 

     //Si la taille di datagrid a changé 
     if (NewSizeDataGrid < SizeDatagrid) 
     { 
      if (VisibilityFiche == Visibility.Visible) 
       return "*"; 
     } 
     return "Auto"; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

} 

和MA视图

<ColumnDefinition> 
      <ColumnDefinition.Width> 
       <MultiBinding Converter="{StaticResource FicheWidthVisibilityConverter}" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"> 
        <MultiBinding.Bindings> 
         <Binding ElementName="Datagrid" Path="ActualWidth"/> 
         <Binding ElementName="Fiche" Path="Visibility"/> 
        </MultiBinding.Bindings> 
       </MultiBinding> 
      </ColumnDefinition.Width> 
     </ColumnDefinition> 

回答

1

您应该返回GridLength类型,而不是简单的字符串值。因此,您应该用return new GridLength(1, GridUnitType.Star);return "Auto"替换return "*";return GridLength.Auto;GridLength类属于System.Windows命名空间

+0

谢谢!它完美的作品! –