WPF中的我的FolderBrowserDialog未显示

时间:2015-10-28 08:56:28

标签: c# wpf user-controls

我使用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,但对话框未显示。

我在输出面板中也没有任何绑定错误......

1 个答案:

答案 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)可能是错误的,但也许你在这个例子中拼错了一些名字。