我正在尝试学习WPF MVVM,我需要了解如何通过模式窗口更新文本框值。在代码下面,我编写了将值传递给ViewModel的操作,但未更新文本框。预先感谢
UserControl 控制台文本框
<TextBox x:Name="Text01UC" Text="{Binding TextUC, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Width="200" Height="33"/>
背后的用户控件
namespace InvioDati
{
public partial class textbox : UserControl
{
public textbox()
{
InitializeComponent();
var vm = new ModelTextView();
this.DataContext = vm;
vm.Load();
}
private void Open_Click(object sender, RoutedEventArgs e)
{
MoadalWindow md = new MoadalWindow();
md.ShowDialog();
}
}
}
ModelTextView
namespace InvioDati
{
class ModelTextView : BaseViewModel
{
private ModelText dati = new ModelText();
public string TextUC
{
get => dati.TextVal;
set
{
dati.TextVal = value;
OnPropertyChanged();
}
}
public void Load() {
TextUC = "GoodMorning";
}
public void Ricevi(string valore)
{
TextUC = valore;
}
}
}
后面的ModalWindow代码 命名空间InvioDati {
public partial class MoadalWindow : Window
{
public MoadalWindow()
{
InitializeComponent();
}
private void Test_Click(object sender, RoutedEventArgs e)
{
ModelTextView nd = new ModelTextView();
nd.Ricevi(Send.Text);
this.Close();
}
}
}
答案 0 :(得分:1)
将DataContext
的{{1}}设置为ModalWindow
中ModelTextView
的相同实例:
textbox.xaml.cs
然后您可以直接绑定到private void Open_Click(object sender, RoutedEventArgs e)
{
MoadalWindow md = new MoadalWindow();
md.DataContext = this.DataContext;
md.ShowDialog();
}
属性,也可以在TextUC
中执行以下操作:
ModalWindow.xaml.cs
答案 1 :(得分:0)
1b。添加观察者模式可为值更改创建通知。
在MVVM中,对话框是有害的,通常您不需要它们。您想要的是一个叠加视图,它可以以任何方式绑定数据,因为可视树没有中断
如果要使用“对话框”,请实施DialogService来使用。
编辑:这是有关如何以最简单的方式创建“弹出”内容的草案:
<UserControl>
<Grid>
<!--Invert visability of all controls below via binding-->
<YourMainControl/>
<Rect Fill="Black" Opacity=".5 Visibility="Hidden"/>
<YourSubControl Visibility="Hidden"/>
</Grid>
</UserControl>