2
環境
マイクロソフトのVisual Studio 2017
のWindows 7WPF:どのようにデータが2つのオブジェクトを持つ単一のクラスで2テキストボックスのための結合を行うために
問題/ゴール
私はデータバインディングをしたいです単一のクラスオブジェクトを持つtxtbox (今)
XAML
<!--User 1 config-->
<GroupBox Name="grpBoxUser1" Margin="10,10,10,10" FontSize="16" Grid.Row="0" Height="Auto" Grid.ColumnSpan="2">
<GroupBox.Header>
<TextBlock FontWeight="DemiBold" Foreground="Navy"> User 1 config</TextBlock>
</GroupBox.Header>
<Grid ShowGridLines="False">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="IP address: " Grid.Row="0" Grid.Column="0" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBlock Text="TCP port: " Grid.Row="0" Grid.Column="2" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBlock Text="Username: " Grid.Row="1" Grid.Column="0" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBlock Text="Password: " Grid.Row="1" Grid.Column="2" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBlock x:Name="UserConnectionStatus" Grid.Row="5" Grid.Column="0"
FontSize="12" FontWeight="DemiBold" Margin="4"
VerticalAlignment="Center" HorizontalAlignment="Left"
Text="{Binding Path= UserStatus}"
/>
<Button Grid.Row="1" Grid.Column="4" FontSize="12"
HorizontalAlignment="Center" VerticalAlignment="Bottom"
Margin="10" Name="UserTestButton"
Content="Test" VerticalContentAlignment="Center" Width="60"
Click="checkUserStatus"
/>
<!--<TextBlock Text="Pre-defined Layout: " Grid.Row="2" Grid.Column="0" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>-->
<TextBox Name="textboxIP1" Grid.Row="0" Grid.Column="1"
FontSize="12" VerticalAlignment="Center"
HorizontalAlignment="Left" Margin="4" Width="100"
Text="{Binding IP}"
PreviewTextInput="TextboxIP1PreviewTextInput"
/>
<TextBox Name="textboxPort1" Grid.Row="0" Grid.Column="3" FontSize="12"
VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4" Width="50"
Text="{Binding PORT}"
PreviewTextInput="TextboxPort1PreviewTextInput"
/>
<TextBox Name="textboxUser1" Grid.Row="1" Grid.Column="1" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4" Width="100"
Text="{Binding User_Username}"
/>
<PasswordBox Name="textboxPass1" PasswordChar="*" Grid.Row="1" Grid.Column="3" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4" Width="100"
/>
<!--<ComboBox Name="combo1" Grid.Row="2" Grid.Column="1"
FontSize="12" VerticalAlignment="Center"
HorizontalAlignment="Left" Margin="4" Width="100"
ItemsSource="{Binding Source={StaticResource layoutDataProvider}}">
</ComboBox>-->
</Grid>
<!--User 2 config-->
<GroupBox Name="grpBoxUser2" Margin="10,10,10,10" FontSize="16" Grid.Row="2" Height="Auto" Grid.ColumnSpan="2">
<GroupBox.Header>
<TextBlock FontWeight="DemiBold" Foreground="Navy"> User 2 config</TextBlock>
</GroupBox.Header>
<Grid ShowGridLines="False">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock Text="IP address: " Grid.Row="0" Grid.Column="0" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBlock Text="TCP port: " Grid.Row="0" Grid.Column="2" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBlock Text="Username: " Grid.Row="1" Grid.Column="0" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBlock Text="Password: " Grid.Row="1" Grid.Column="2" FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4"></TextBlock>
<TextBox Name="textboxIP2" Grid.Row="0" Grid.Column="1"
FontSize="12" VerticalAlignment="Center"
HorizontalAlignment="Left" Margin="4" Width="100"
Text="{Binding IP_User2}"
PreviewTextInput="TextboxIP1PreviewTextInput" />
<TextBox Name="textboxPort2" Grid.Row="0" Grid.Column="3" FontSize="12"
VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4" Width="50"
Text="{Binding PORT_User2}"
PreviewTextInput="TextboxPort1PreviewTextInput"/>
<TextBox Name="textboxUser2" Grid.Row="1" Grid.Column="1" FontSize="12"
VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4" Width="100"
Text="{Binding User_Username_User2}"/>
<PasswordBox Name="textboxPass2" PasswordChar="*" Grid.Row="1" Grid.Column="3"
FontSize="12" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="4" Width="100" />
<Button Grid.Row="1" FontSize="12" VerticalAlignment="Bottom"
Margin="10" Name="UserTestButtonUser2"
Content="Test" VerticalContentAlignment="Center" Width="60"
Click="checkUserStatus" HorizontalAlignment="Center" Grid.Column="4"
/>
</Grid>
クラス
using System;
using System.ComponentModel;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace App
{
public class UserViewModel : INotifyPropertyChanged
{
#region Properties
#region Private members
private string _ip;
private string _port;
private string _username;
private string _pass;
private string _ip2;
private string _port2;
private string _username2;
private string _pass2;
#endregion
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
/// <summary>
/// IP Address of the User
/// </summary>
public string IP
{
get { return _ip; }
set
{
_ip = value;
NotifyPropertyChanged("IP");
}
}
/// <summary>
/// User Port number
/// </summary>
public string PORT
{
get { return _port; }
set
{
_port = value;
NotifyPropertyChanged("PORT");
}
}
/// <summary>
/// User Login Username
/// </summary>
public string User_Username
{
get { return _username; }
set
{
_username = value;
NotifyPropertyChanged("User_Username");
}
}
/// <summary>
/// User Login password
/// </summary>
public string User_Pass
{
get { return _pass; }
set
{
_pass = value;
NotifyPropertyChanged("User_Pass");
}
}
public string IP_User2
{
get { return _ip2; }
set
{
_ip2 = value;
NotifyPropertyChanged("IP_User2");
}
}
/// <summary>
/// User Port number
/// </summary>
public string PORT_User2
{
get { return _port2; }
set
{
_port2 = value;
NotifyPropertyChanged("PORT_User2");
}
}
/// <summary>
/// User Login Username
/// </summary>
public string User_Username_User2
{
get { return _username2; }
set
{
_username2 = value;
NotifyPropertyChanged("User_Username_User2");
}
}
/// <summary>
/// User Login password
/// </summary>
public string User_Pass_User2
{
get { return _pass2; }
set
{
_pass2 = value;
NotifyPropertyChanged("User_Pass_User2");
}
}
#endregion
#region Constructor
public UserViewModel()
{
}
#endregion
}
}
GOAL
クラス(このようにややリファクタリングしたい)
私はクラス以下のようにリファクタリングしたいと思います。だから私は、単一のクラスを使用して2つのオブジェクトを作成し、それらの2つのオブジェクトをUIでバインドすることができます。
using System;
using System.ComponentModel;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
namespace App
{
public class UserViewModel : INotifyPropertyChanged
{
#region Properties
#region Private members
private string _ip;
private string _port;
private string _username;
private string _pass;
#endregion
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
/// <summary>
/// IP Address of the User
/// </summary>
public string IP
{
get { return _ip; }
set
{
_ip = value;
NotifyPropertyChanged("IP");
}
}
/// <summary>
/// User Port number
/// </summary>
public string PORT
{
get { return _port; }
set
{
_port = value;
NotifyPropertyChanged("PORT");
}
}
/// <summary>
/// User Login Username
/// </summary>
public string User_Username
{
get { return _username; }
set
{
_username = value;
NotifyPropertyChanged("User_Username");
}
}
/// <summary>
/// User Login password
/// </summary>
public string User_Pass
{
get { return _pass; }
set
{
_pass = value;
NotifyPropertyChanged("User_Pass");
}
}
#endregion
#region Constructor
public UserViewModel()
{
}
#endregion
}
}
はU1であり、U2はオブジェクトですか?またはそれらはU1クラスとU2クラスですか? – alrightyy
U1とU2は、UserViewModelクラスのオブジェクトではありません。 – ParameterX