WPF border的长度和高度在MVVM模式下怎么能绑定到viewmodel的自己创建属性上
时间: 2023-11-27 17:51:24 浏览: 34
可以使用WPF中的绑定机制,将Border的长度和高度绑定到ViewModel中自己创建的属性上。
首先,在ViewModel中创建两个属性,用于保存Border的长度和高度:
```
public double BorderWidth { get; set; }
public double BorderHeight { get; set; }
```
然后,在View中,可以将Border的长度和高度绑定到这两个属性上:
```
<Border Width="{Binding BorderWidth}" Height="{Binding BorderHeight}">
<!-- Border content here -->
</Border>
```
在这里,我们使用了绑定表达式`{Binding BorderWidth}`和`{Binding BorderHeight}`,这样,当ViewModel中的BorderWidth和BorderHeight属性发生变化时,Border的长度和高度也会自动更新。
最后,在ViewModel中修改BorderWidth和BorderHeight的值即可改变Border的大小:
```
BorderWidth = 100;
BorderHeight = 50;
```
相关问题
WPF border的长度和高度在MVVM模式下怎么能绑定到viewmodel的自己创建属性上,并且在viewmodel里面可以以值的方式读取到尺寸
可以使用绑定来实现WPF Border的长度和高度的MVVM绑定。
首先在ViewModel中创建一个属性,用来存放长度和高度的值:
```csharp
private double _borderWidth = 100;
public double BorderWidth
{
get { return _borderWidth; }
set { _borderWidth = value; OnPropertyChanged(nameof(BorderWidth)); }
}
private double _borderHeight = 50;
public double BorderHeight
{
get { return _borderHeight; }
set { _borderHeight = value; OnPropertyChanged(nameof(BorderHeight)); }
}
```
然后在View中,使用绑定将Border的长度和高度绑定到ViewModel的属性上:
```xml
<Border Width="{Binding BorderWidth}" Height="{Binding BorderHeight}" Background="Gray">
<TextBlock Text="Hello World!" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
```
这样就可以通过ViewModel控制Border的长度和高度了。如果需要在ViewModel中以值的方式读取到尺寸,可以直接访问BorderWidth和BorderHeight属性的值。
WPF PassWordBox如何在MVVM模式下绑定ViewModel
在MVVM模式下,PassWordBox的密码不能直接绑定到ViewModel的属性,因为密码是敏感信息,不应该以明文形式存储在内存中。因此,我们需要使用PasswordBox的SecureString属性来存储密码,并在ViewModel中创建一个SecureString类型的属性来接收密码。
首先,在XAML中,我们需要将PassWordBox的PasswordChanged事件与Command绑定,以便在密码发生变化时触发Command执行。例如:
```
<PasswordBox PasswordChanged="{Binding PasswordChangedCommand}" />
```
然后,在ViewModel中,我们需要创建一个SecureString类型的属性来接收密码,并创建一个Command来处理密码变化事件,例如:
```
public class LoginViewModel : INotifyPropertyChanged
{
private SecureString _securePassword;
public SecureString SecurePassword
{
get { return _securePassword; }
set
{
_securePassword = value;
OnPropertyChanged(nameof(SecurePassword));
}
}
public ICommand PasswordChangedCommand => new RelayCommand<PasswordBox>((pb) =>
{
SecurePassword = pb.SecurePassword;
});
// INotifyPropertyChanged implementation...
}
```
在这个示例中,我们创建了一个SecurePassword属性来接收密码,并使用PasswordBox的SecurePassword属性将密码赋值给SecurePassword。我们还创建了一个PasswordChangedCommand来处理密码变化事件,该Command使用RelayCommand实现,并将PasswordBox作为参数传递。当密码发生变化时,Command会将SecurePassword属性设置为新密码。
需要注意的是,由于SecureString无法直接转换为字符串,因此我们需要在处理密码时使用相应的方法来转换或处理SecureString。