【发布时间】:2019-01-08 09:33:05
【问题描述】:
说明: 单击浏览按钮后,我必须获取 FolderBrowserDialog Box。在文件夹浏览器对话框中,如果我选择任何文件夹并单击确定,则该特定文件夹路径和文件夹名称应显示在浏览按钮旁边的文本框中......但是一旦我单击浏览按钮,我什么也没有得到。 请检查我的代码并纠正我...
View.xaml:
<Window.... xmlns:VM="clr-namespace:myproject.myViewModel"
... >
<Window.DataContext><VM:myViewModel/>
<Grid>...
<TextBlock Text="Folder to save files" VerticalAlignment="Center" />
<TextBox Text="{Binding Path=FoldernameWithPath , UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Height="26" IsReadOnly="True" VerticalContentAlignment="Center" Width="150" />
<Button Content="Browse" Height="26" VerticalAlignment="Bottom" MinWidth="45" Command="{Binding OpenFolderCommand}" />
</Grid>
</window>
ViewModel.cs
public ICommand OpenFolderCommand
{
get => new RelayCommand(a => this.OpenFolder(), p => CanOpenFolder());
}
private string _foldernameWithPath;
public string FoldernameWithPath
{
get { return _foldernameWithPath; }
set
{
if (value == _foldernameWithPath)
{
return;
}
else
{
_foldernameWithPath = value;
OnPropertyChanged("FoldernameWithPath");
}
}
}
public bool CanOpenFolder()
{
return true;
}
private void OpenFolder()
{
FolderBrowserDialog openFolderDialog = new FolderBrowserDialog();
if (openFolderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK && OpenFolderCommand.CanExecute(openFolderDialog.SelectedPath))
{
OpenFolderCommand.Execute(openFolderDialog.SelectedPath);
FoldernameWithPath = openFolderDialog.SelectedPath;
}
}
【问题讨论】:
-
尝试省略您的 CanOpenFolder。我认为验证此命令参数没有意义。当我尝试您的代码时,按钮因此被禁用。
-
现在我编辑了 Viewmodel.cs ...但我仍然没有得到
-
去掉 'CommandParameter="{x:Type views:myView}' 这个然后试试,
-
好的,我删除了..但仍然没有得到预期的输出
-
Faisal 是对的,不需要CommandParameter,但我不认为这是行为的原因。我会尝试将命令属性设置为 public get 和 private set 并在构造函数或初始化方法中实例化它。