Mam właściwość do której binduję:
[Category("Toners")]
public TonerData[] TonerData
{
get { return (GSPrinters.Intefaces.TonerData[])GetValue(TonerDataProperty); }
set { SetValue(TonerDataProperty, value); }
}
Teraz potrzebuję na podstawie indexu określić jaki typ status odczytu toneru TonerData.eTonerStatus zawiera klasa **TonerData **o konkretnym indexie, a następnie wyświetlić lub ukryć konkretne kolumny w widoku.
Mam stworzone dwa konwertery
- Z indexu TonerData[] na typ TonerData.eTonerStatus
internal class IndexToTypeConverter : IValueConverter
{
private int tonerIndex = 0;
public int TonerIndex
{
get { return tonerIndex; }
set { tonerIndex = value; }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
TonerData[] td = value as TonerData[];
if (td == null)
return TonerData.eTonerStatus.Error;
if (td.Count() <= TonerIndex)
return TonerData.eTonerStatus.Unavailable;
return td[tonerIndex].Status;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
- Z TonerData.eTonerStatus na Visibility
internal class TypeToVisibilityConverter : IValueConverter
{
private TonerData.eTonerStatus status;
public TonerData.eTonerStatus Status
{
get { return status; }
set { status = value; }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
TonerData.eTonerStatus v = (TonerData.eTonerStatus)value;
return (v == status) ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Potrzebuję teraz określając index TonerData[] ukryć kontrolkę której konwerter TypeToVisibilityConverter w bindingu wskazał wartość TonerData.eTonerStatus inną niż określoną w konwerterze. Oczywiście wcześniej musze użyć konwertera **IndexToTypeConverter **. Czy można użyć dwóch konwerterów w jednym bindingu czy muszę pisac osobny konwerter?
Coś na ten wzór
<Grid>
<Grid.Visibility>
<Binding ElementName="hWindow" Path="TonerData">
<Binding.Converter>
<local:IndexToTypeConverter TonerIndex="0">
<local:TypeToVisibilityConverter Status="Unavailable"/>
</local:IndexToTypeConverter>
</Binding.Converter>
</Binding>
</Grid.Visibility>
</Grid>