Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface IOService
- {
- string OpenFileDialog(string defaultPath);
- //Other similar untestable IO operations
- Stream OpenFile(string path);
- }
- public MyViewModel : ViewModel
- {
- private string _selectedPath;
- public string SelectedPath
- {
- get { return _selectedPath; }
- set { _selectedPath = value; OnPropertyChanged("SelectedPath"); }
- }
- private RelayCommand _openCommand;
- public RelayCommand OpenCommand
- {
- //You know the drill.
- ...
- }
- private IOService _ioService;
- public MyViewModel(IOService ioService)
- {
- _ioService = ioService;
- OpenCommand = new RelayCommand(OpenFile);
- }
- private void OpenFile()
- {
- SelectedPath = _ioService.OpenFileDialog(@"c:WhereMyFileUsuallyIs.txt");
- if(SelectedPath == null)
- {
- SelectedPath = string.Empty;
- }
- }
- }
- [Test]
- public void OpenFileCommand_UserSelectsInvalidPath_SelectedPathSetToEmpty()
- {
- Mock<IOService> ioServiceStub = new Mock<IOService>();
- //We use null to indicate invalid path in our implementation
- ioServiceStub.Setup(ioServ => ioServ.OpenFileDialog(It.IsAny<string>()))
- .Returns(null);
- //Setup target and test
- MyViewModel target = new MyViewModel(ioServiceStub.Object);
- target.OpenCommand.Execute();
- Assert.IsEqual(string.Empty, target.SelectedPath);
- }
- [Test]
- [Isolated]
- public void OpenFileCommand_UserSelectsInvalidPath_SelectedPathSetToEmpty()
- {
- IOService ioServiceStub = Isolate.Fake.Instance<IOService>();
- //Setup stub arrangements
- Isolate.WhenCalled(() => ioServiceStub.OpenFileDialog("blah"))
- .WasCalledWithAnyArguments()
- .WillReturn(null);
- //Setup target and test
- MyViewModel target = new MyViewModel(ioServiceStub);
- target.OpenCommand.Execute();
- Assert.IsEqual(string.Empty, target.SelectedPath);
- }
- public class OpenFileDialogVM : ViewModelBase
- {
- public static RelayCommand OpenCommand { get; set; }
- private string _selectedPath;
- public string SelectedPath
- {
- get { return _selectedPath; }
- set
- {
- _selectedPath = value;
- RaisePropertyChanged("SelectedPath");
- }
- }
- private string _defaultPath;
- public OpenFileDialogVM()
- {
- RegisterCommands();
- }
- public OpenFileDialogVM(string defaultPath)
- {
- _defaultPath = defaultPath;
- RegisterCommands();
- }
- private void RegisterCommands()
- {
- OpenCommand = new RelayCommand(ExecuteOpenFileDialog);
- }
- private void ExecuteOpenFileDialog()
- {
- var dialog = new OpenFileDialog { InitialDirectory = _defaultPath };
- dialog.ShowDialog();
- SelectedPath = dialog.FileName;
- }
- }
- <TextBox Text="{Binding SelectedPath}" />
- <Button Command="vm:OpenFileDialogVM.OpenCommand" >Browse</Button>
- DataContext = new OpenFileDialogVM();
- InitializeComponent();
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="*"/>
- <ColumnDefinition Width="Auto"/>
- </Grid.ColumnDefinitions>
- <TextBox Grid.Column="0" Text="{Binding Text, RelativeSource={RelativeSource AncestorType=UserControl}}"/>
- <Button Grid.Column="1"
- Click="Button_Click">
- <Button.Template>
- <ControlTemplate>
- <Image Grid.Column="1" Source="../Images/carpeta.png"/>
- </ControlTemplate>
- </Button.Template>
- </Button>
- </Grid>
- public static readonly DependencyProperty TextProperty = DependencyProperty.Register(
- "Text",
- typeof(string),
- typeof(customFilePicker),
- new FrameworkPropertyMetadata(
- null,
- FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Journal));
- public string Text
- {
- get
- {
- return this.GetValue(TextProperty) as String;
- }
- set
- {
- this.SetValue(TextProperty, value);
- }
- }
- public FilePicker()
- {
- InitializeComponent();
- }
- private void Button_Click(object sender, RoutedEventArgs e)
- {
- OpenFileDialog openFileDialog = new OpenFileDialog();
- if(openFileDialog.ShowDialog() == true)
- {
- this.Text = openFileDialog.FileName;
- }
- }
- <controls:customFilePicker Text="{Binding Text}"}/>
Add Comment
Please, Sign In to add comment