我使用WPF并希望显示FolderBrowserDialog
因此我创建了一个WPF-UserControl shell:
<UserControl x:Class="FolderBrowserDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</UserControl>
它的代码隐藏:
public static readonly DependencyProperty ShowDialogProperty =
DependencyProperty.Register("ShowDialog", typeof (bool),
typeof (SaveFileDialog));
public bool ShowDialog
{
get { return (bool) GetValue(ShowDialogProperty); }
set
{
SetValue(ShowDialogProperty, value);
if (value)
{
var folderBrowserDialog = new FolderBrowserDialog();
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
PathToFolder = folderBrowserDialog.SelectedPath;
}
}
}
}
我在另一个需要此对话框的WPF UserControl上使用FolderBrowser-UserControl:
<UserControl:FolderBrowserDialogShowDialog="{Binding ShowFolderBrowser, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
在我的ViewModel上是一个带有ShowFolderBrowser
事件的公共属性onPropertyChanged
,但对话框未显示。
我在输出面板中也没有任何绑定错误......
答案 0 :(得分:0)
使用Property Dependency时,不应将代码放入get和set中。如果您从Xaml设置值,则会自动调用SetValue。
相反,您可以使用回调进行通知,例如
public static readonly DependencyProperty ShowDialogProperty =
DependencyProperty.Register("ShowDialog", typeof (bool),
typeof (SaveFileDialog), new UIPropertyMetadata(false, ShowDialogChangedCallback));
private static void ShowDialogChangedCallback(DependencyObject source,
DependencyPropertyChangedEventArgs e)
{
YourControl control = source as YourControl;
bool showdialog = (bool)e.NewValue;
// logic here
}
进一步检查你的依赖属性声明,因为typeof (SaveFileDialog)
可能是错误的,但也许你在这个例子中拼错了一些名字。