У моего представления есть 2 кнопки под названием BrowseButton и UploadButton.Использование IValueConverter для включения/выключения свойства IsDefault кнопки
BrowseButton is default и UploadButton нет. Моя цель - изменить значение по умолчанию после нажатия кнопки «Обзор» (т. Е. BrowseButton не является значением по умолчанию, а UploadButton).
При нажатии на кнопку BrowseButton отображается свойство (строка) в моей модели ViewModel. Это означает, что я могу привязать это свойство и передать значение этого свойства моему IValueConverter и вернуть либо true, либо false. Это работает по желанию.
Мой BoolConverter выглядит
public class BoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null || string.IsNullOrEmpty(System.Convert.ToString(value)))
return false;
return true;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
И мой Xaml
<Button Content="Browse for file" Width="150" Margin="5" Command="{Binding BrowseForFileCommand}" IsDefault="{Binding File, Converter={StaticResource BConverter}}" />
<Button Content="Upload" Width="75" Margin="5" Command="{Binding UploadCommand}" IsDefault="{Binding File, Converter={StaticResource BConverter}}" />
Проблема заключается в том, они оба связывают к тому же классу BoolConverter и, как таковые, оба равны (т.е. если один ложно, то оба ложные!). Опять же, я могу понять, почему.
Мой вопрос: как мне обойти это? Это действительно просто случай наличия нескольких классов конвертеров?
EG
public class BoolConverterForThis : IValueConverter
{//implementation}
public class BoolConverterForThat : IValueConverter
{//implementation}
public class BoolConverterForOther : IValueConverter
{//implementation}
почему бы не определить два свойства BOOL в вашей ViewModel как 'CanUpload',' CanBrowse' и привязывать напрямую? –
Я думал об этом, но было неправильно использовать ViewModel для функции пользовательского интерфейса; Я чувствовал, что ViewModel должен хранить данные только. Это неправильно? – Dave