gpt4 book ai didi

用户控件中的 MVVM 文本框绑定(bind)到不同的类型

转载 作者:行者123 更新时间:2023-12-03 10:39:20 24 4
gpt4 key购买 nike

我在网格内使用用户控件。此用户控件包含一个文本框,该文本框绑定(bind)了 View 模型提供的对象的属性。我的问题是属性可以是字符串或整数。

我将依赖属性设置为字符串,因此它可以正常显示,但是如果用户在 int 字段中输入字符串,则 View 模型不会引发验证错误,但我当然无法保存到数据库中。

用户控制 XAML

<UserControl x:Class="GenericFileTransferClient.Views.UserControlTextBox"
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"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Name="GridLayout">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="7*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=LabelText}" VerticalAlignment="Center" Style="{StaticResource ResourceKey=TextBlockWrapping}" />
<DockPanel Grid.Column="1">
<Border DockPanel.Dock="Right"
ToolTip="" Style="{StaticResource BorderReportDetail}">
<TextBlock Text="?" Style="{StaticResource TextBoxReportDetail}"></TextBlock>
</Border>
<TextBox Text="{Binding Path=TextBoxText}"/>
</DockPanel>
</Grid>
</UserControl>

后面的用户控制代码
public partial class UserControlTextBox : UserControl
{
public static DependencyProperty LabelTextProperty = DependencyProperty.Register("LabelText", typeof(String), typeof(UserControl));
public static DependencyProperty TextBoxTextProperty = DependencyProperty.Register("TextBoxText", typeof(String), typeof(UserControl));


public String LabelText
{
get { return (String)GetValue(LabelTextProperty); }
set { SetValue(LabelTextProperty, value); }
}

public String TextBoxText
{
get { return (String)GetValue(TextBoxTextProperty); }
set { SetValue(TextBoxTextProperty, value); }
}

public UserControlTextBox()
{
InitializeComponent();
GridLayout.DataContext = this;
}
}

在主网格中调用用户控件的示例
<views:UserControlTextBox LabelText="Report Name:" TextBoxText="{Binding Path=CurrentReport.ReportName}" Grid.Row="1" Grid.ColumnSpan="2"/>

<TextBlock Text="Header:" Grid.Row="2"/>
<CheckBox Grid.Column="1" Grid.Row="2" IsChecked="{Binding Path=CurrentReport.Header}"
VerticalContentAlignment="Stretch" VerticalAlignment="Center" Name="HeaderCheckBox"/>

<Grid Grid.Row="3" Grid.ColumnSpan="2" Visibility="{Binding IsChecked, ElementName=HeaderCheckBox, Converter={StaticResource BoolToVisConverter}}">

<views:UserControlTextBox LabelText="# Row Header:" TextBoxText="{Binding Path=CurrentReport.HeaderRow}"/>
</Grid>

如您所见,CurrentReport.ReportName 是一个字符串,但 CurrentReport.HeaderRow 是一个 int。

有什么方法可以使依赖属性通用或基于传递给用户控件的参数。或者有什么方法可以在用户点击保存按钮之前进行验证?

谢谢

最佳答案

我会写一个简单的IntToStringConverter然后在你的 TextBoxText 中使用它绑定(bind)以将字符串传递给您的用户控件。

关于用户控件中的 MVVM 文本框绑定(bind)到不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10801598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com