【发布时间】:2018-10-09 15:51:35
【问题描述】:
我有一个对话框窗口,我需要将完整的文件路径返回到我的视图模型,我想这样做,但只在用户视图的文本框中显示文件名。我有一个行为类、一个视图模型和一个视图。我尝试在行为类中将名称作为属性捕获,但是当我绑定到文本框以检查输出时,我没有得到该值。这是浏览器对话框
namespace BasemapCreator.Behaviors
{
public class FolderDialogBehavior:Behavior<System.Windows.Controls.Button>
{
public void FolderBrowserDialog()
{
}
public string SetterName { get; set; }
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.Click += OnClick;
}
protected override void OnDetaching()
{
AssociatedObject.Click -= OnClick;
}
private void OnClick(object sender, RoutedEventArgs e)
{
var dialog = new FolderBrowserDialog();
var result = dialog.ShowDialog();
if (result == DialogResult.OK && AssociatedObject.DataContext != null)
{
var propertyInfo = AssociatedObject.DataContext.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public)
.Where(p => p.CanRead && p.CanWrite)
.First(p => p.Name.Equals(SetterName));
string dirName = new DirectoryInfo(dialog.SelectedPath).Name;
FolderName = dirName;
_fileName = System.IO.Path.GetFileName(dirName);
FileName = _fileName;
ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show(FileName.ToString());
propertyInfo.SetValue(AssociatedObject.DataContext, dialog.SelectedPath, null);
}
}
private string _folderName;
public string FolderName
{
get { return _folderName; }
set
{
if (value != _folderName )
{
_folderName = value;
OnPropertyChanged("FolderName");
}
}
}
private string _fileName;
public string FileName
{
get { return _fileName; }
set
{
if (_fileName != value)
{
_fileName = value;
OnPropertyChanged("FileName");
}
}
}
private string _styleName;
public string StyleName
{
get { return _styleName; }
set
{
if (_styleName != value)
{
_styleName = value;
OnPropertyChanged("StyleName");
}
}
}
private void OnPropertyChanged(string propertyname)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyname));
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(PropertyChangedEventArgs args)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, args);
}
}
}
这是视图中的绑定
<TextBox x:Name="gdbName" HorizontalAlignment="Left" Height="30" Margin="56,29,0,0" Text="{Binding FolderName, Mode=TwoWay}" VerticalAlignment="Top" Width="282" AllowDrop="True">
</TextBox>
在 ViewModel 中我有 FolderName 属性
private string _folderName;
public string FolderName
{
get { return _folderName; }
set
{
_folderName = value;
OnPropertyChanged("FolderName");
}
}
一切正常,但路径名太长,有时会被隐藏。我想显示文件名并传递完整路径。
【问题讨论】:
-
你为什么不创建一个包含你需要的东西的新对象呢?在这种情况下,文件名和完整路径。