问题描述
我需要从Text
中的TextBox
标记中获得SubmitCommand
值
但我只会得到一个空值。请帮助我找出在MessageBox
中显示文本所需的操作。
<UserControl>
<Grid>
<StackPanel
Grid.Row="1"
Grid.Column="1"
Margin="0"
FocusManager.IsFocusScope="true">
<TextBox
Name="linkTb"
DataContext="{Binding SelectedSite}"
IsManipulationEnabled="True"
TabIndex="0" />
<StackPanel
Orientation="Horizontal">
<Button
x:Name="submitButton"
Command="{Binding SubmitCommand}"
CommandParameter="{Binding SelectedSite}"
Content="Submit"/>
</Grid>
</UserControl>
public class Loginviewmodel : MainviewmodelBase
{
private string selectedSite;
public Loginviewmodel(NavigationManager navigationManager) : base(navigationManager)
{
SubmitCommand = new RelayCommand(obj => Submit());
}
public RelayCommand SubmitCommand { get; set; }
public string SelectedSite
{
get { return selectedSite; }
set
{
selectedSite = value;
}
}
public void Submit()
{
MessageBox.Show(SelectedSite);
NavigationManager.Navigate(NavigationKeys.Main);
}
}
此屏幕快照显示了我的空MessageBox
,其中应包含文本:
解决方法
绑定Text
属性并将源属性(UpdateSourceTrigger
)的PropertyChanged
设置为SelectedSite
,以在每个按键上进行设置:
<TextBox
Name="linkTb"
Text="{Binding SelectedSite,UpdateSourceTrigger=PropertyChanged}"
IsManipulationEnabled="True"
TabIndex="0" />
由于TextBox
应该更新source属性,因此无需将其作为参数传递给命令,因此可以删除此属性:
CommandParameter="{Binding SelectedSite}"