本文只介绍文本框(TextBox)的数据绑定和按钮(Button)的Command绑定
项目组成
为清晰演示,项目只有2个界面
1.MainView。主界面,包含一个TabControl
2.MyUserControlView。自己创建的用户控件
具体代码
MainView中引入了我们自己开发的用户控件MyUserControlViewModel
<Window x:Class="MiniTools.Pages.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:s="https://github.com/canton7/Stylet"
xmlns:local="clr-namespace:MiniTools.Pages"
xmlns:myUserUserControl="clr-namespace:MiniTools.Pages"
mc:Ignorable="d"
Topmost="False"
WindowStartupLocation="CenterScreen"
ResizeMode="CanMinimize"
d:DataContext="{d:DesignInstance local:MainViewModel}"
Title="Stylet Project" Height="450" Width="800" >
<Grid>
<TabControl>
<TabItem Header="工具箱" IsSelected="True">
<myUserUserControl:MyUserControlView/>
</TabItem>
</TabControl>
</Grid>
</Window>
主要是MyUserControlView的代码
<UserControl x:Class="MiniTools.Pages.MyUserControlView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:MiniTools.Pages"
xmlns:s="https://github.com/canton7/Stylet"
d:DataContext="{d:DesignInstance local:MyUserControlViewModel}"
mc:Ignorable="d"
Height="Auto" Width="800">
<UserControl.Resources>
<local:MyUserControlViewModel x:Key="local:MyUserControlViewModel"/>
</UserControl.Resources>
<UserControl.DataContext>
<Binding Source="{StaticResource local:MyUserControlViewModel}"/>
</UserControl.DataContext>
<Grid DataContext="{StaticResource MyUserControlViewModel}">
<TextBox
Text="{Binding Monitoring_EhomeId,UpdateSourceTrigger=PropertyChanged}"
/>
<Button
Content="计算并复制"
s:View.ActionTarget="{Binding}"
Command="{s:Action CalculationMonitoringEhomeId}"
CommandParameter="带参按钮"
/>
</Grid>
</UserControl>
MyUserControlViewModel
using MiniTools.Utils;
using Stylet;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MiniTools.Pages
{
public class MyUserControlViewModel: Screen
{
#region
public string Monitoring_EhomeId { get; set; } = String.Empty;
public void CalculationMonitoringEhomeId(string argument)
{
Monitoring_EhomeId = "adsadadasdadsad";
}
#endregion
}
}
结论
主要是需要在UserControl 中指定DataContext
<UserControl.Resources>
<local:MyUserControlViewModel x:Key="local:MyUserControlViewModel"/>
</UserControl.Resources>
<UserControl.DataContext>
<Binding Source="{StaticResource local:MyUserControlViewModel}"/>
</UserControl.DataContext>
控件最外层再指定一次
<Grid DataContext="{StaticResource MyUserControlViewModel}">
按钮中需要补充写:
s:View.ActionTarget="{Binding}"
为什么要这样写才能绑定成功暂不清楚,有了解的大佬可以说说