用户控件打开对话框,其中对话框结果更新使用它的页面的viewmodel中的属性

时间:2012-12-22 14:57:50

标签: wpf mvvm controls

我一直在努力解决这个问题。这似乎相对简单,但我不确定如何解决它。非常喜欢你的帮助。

我有一个绑定到viewmodel的页面,它有一些代表文件路径的字符串属性。

我已经构建了一个具有文本框和按钮的用户控件。控件的用途:单击按钮(文件对话框)时显示对话框,并根据结果更新文本框。

这是xaml:

<UserControl x:Class="MyProject.Controls.FilePickerLauncherControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         x:Name="me"
         d:DesignHeight="300" d:DesignWidth="300">
<DockPanel>
    <Button Content="..." DockPanel.Dock="Right" Command="{Binding OpenFileDialogCommand,ElementName=me}"></Button>
    <TextBox Text="{Binding Path=PathChosen,ElementName=me}" DockPanel.Dock="Right" VerticalAlignment="Center" Height="30"></TextBox>
</DockPanel>

这是我在页面视图模型中的命令(动作):

    private void OpenFileExplorer()
    {
        SimpleIoc.Default.GetInstance<IInputOutputService>().OpenFileDialog(modelsDirectory);
    }

现在,对于我的控件的每个实例,我想要做的是获取对话框的结果并将其放在控件中的文本框中。我一直在想:

  1. 可能是一个命令参数,可以发送到这个OpenFileExplorer,告诉我应该以某种方式更新哪个属性,但我不确定如何。

  2. 为每个属性多次写入此命令。我不认为这是正确的。

  3. 使用此命令为我的控件创建一个新的viewmodel,并在我当前的视图模型中创建它的实例。

  4. 你们会说最好的方法是什么?它相对简单,虽然让我感到困惑。

0 个答案:

没有答案