我一直在为这个问题苦苦挣扎一段时间。这似乎比较简单,但我不确定如何解决它。很想得到你的帮助。
我有一个绑定到 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);
}
现在,对于我的控件的每个实例,我想要做的是获取对话框的结果并将其放入控件中的文本框中。我一直在想:
也许一个命令参数将被发送到这个 OpenFileExplorer,告诉哪个属性应该以某种方式更新,但我不确定如何。
为每个属性多次编写此命令。我不认为这是正确的。
使用此命令为我的控件创建一个新的视图模型,并在我当前的视图模型中创建它的实例。
你们会说最好的方法是什么?它相对简单,虽然它让我有点困惑。