質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1672閲覧

Binding XTextBoxText.TextBoxTextをBinding XTextBoxTextだけにしたいです。

picko

総合スコア52

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2016/07/14 04:50

Binding XTextBoxText.TextBoxTextをBinding XTextBoxTextだけにしたいです。
継続の質問なのでコードで。

xaml

1<Window x:Class="LivetWPFApplication1.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 5 xmlns:l="http://schemas.livet-mvvm.net/2011/wpf" 6 xmlns:vm="clr-namespace:LivetWPFApplication1.ViewModels" 7 Title="MainWindow" Height="300" Width="525"> 8 9 <Window.DataContext> 10 <vm:MainWindowViewModel/> 11 </Window.DataContext> 12 13 <i:Interaction.Triggers> 14 <i:EventTrigger EventName="ContentRendered"> 15 <l:LivetCallMethodAction MethodTarget="{Binding}" MethodName="Initialize"/> 16 </i:EventTrigger> 17 18 <l:InteractionMessageTrigger Messenger="{Binding Messenger}" MessageKey="Information"> 19 <l:InformationDialogInteractionMessageAction/> 20 </l:InteractionMessageTrigger> 21 22 <i:EventTrigger EventName="Closed"> 23 <l:DataContextDisposeAction/> 24 </i:EventTrigger> 25 </i:Interaction.Triggers> 26 27 <Grid Margin="10"> 28 <Grid.RowDefinitions> 29 <RowDefinition Height="40"/> 30 <RowDefinition Height="40"/> 31 <RowDefinition Height="40"/> 32 <RowDefinition Height="40"/> 33 <RowDefinition Height="40"/> 34 </Grid.RowDefinitions> 35 <Grid.ColumnDefinitions> 36 <ColumnDefinition Width="150"/> 37 <ColumnDefinition Width="*"/> 38 </Grid.ColumnDefinitions> 39 <Label Grid.Row="0" Grid.Column="0" Content="X" HorizontalAlignment="Left" FontFamily="Meiryo"/> 40 <TextBox Grid.Row="0" Grid.Column="1" Text="{Binding XTextBoxText.TextBoxText}" x:Name="LocationXTextBox" TextWrapping="NoWrap" FontFamily="Meiryo" FontSize="11"/> 41 <Label Grid.Row="1" Grid.Column="0" Content="Y" HorizontalAlignment="Left" FontFamily="Meiryo"/> 42 <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding YTextBoxText.TextBoxText}" x:Name="LocationYTextBox" TextWrapping="NoWrap" FontFamily="Meiryo" FontSize="11"/> 43 44 <Label Grid.Row="2" Grid.Column="0" Content="X2" HorizontalAlignment="Left" FontFamily="Meiryo"/> 45 <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding X2TextBoxText.TextBoxText}" x:Name="LocationX2TextBox" TextWrapping="NoWrap" FontFamily="Meiryo" FontSize="11"/> 46 <Label Grid.Row="3" Grid.Column="0" Content="Y2" HorizontalAlignment="Left" FontFamily="Meiryo"/> 47 <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Y2TextBoxText.TextBoxText}" x:Name="LocationY2TextBox" TextWrapping="NoWrap" FontFamily="Meiryo" FontSize="11"/> 48 <Grid Grid.Row="4" Grid.Column="1"> 49 <Grid.ColumnDefinitions> 50 <ColumnDefinition Width="*"/> 51 <ColumnDefinition Width="75"/> 52 <ColumnDefinition Width="75"/> 53 </Grid.ColumnDefinitions> 54 <Button Grid.Column="1" Content="OK" Click="OkButtonClick"/> 55 <Button Grid.Column="2" Content="Cancel" Click="CancelButtonClick"/> 56 </Grid> 57 </Grid> 58</Window>

C#

1using Livet; 2 3namespace LivetWPFApplication1.ViewModels 4{ 5 using System.Globalization; 6 7 public class MainWindowViewModel : ViewModel 8 { 9 public void Initialize() 10 { 11 } 12 13 private static int initial = 0; 14 15 public doubleValidation XTextBoxText { get; set; } = new doubleValidation(initial = 0); 16 public doubleValidation X2TextBoxText { get; set; } = new doubleValidation(initial = 0); 17 public doubleValidation YTextBoxText { get; set; } = new doubleValidation(initial = 0); 18 public doubleValidation Y2TextBoxText { get; set; } = new doubleValidation(initial = 0); 19 } 20} 21

C#

1using System.Globalization; 2 3namespace LivetWPFApplication1.ViewModels 4{ 5 using Livet; 6 7 public class doubleValidation : ViewModel 8 { 9 private int v; 10 private double x; 11 12 public doubleValidation(int v) 13 { 14 this.v = v; 15 } 16 17 public string TextBoxText 18 { 19 get 20 { 21 return this.x.ToString(CultureInfo.InvariantCulture); 22 } 23 24 set 25 { 26 if (this.TextBoxText == value) 27 { 28 return; 29 } 30 31 double v; 32 33 try 34 { 35 v = double.Parse(value); 36 } 37 catch 38 { 39 this.RaisePropertyChanged(() => this.TextBoxText); 40 41 return; 42 } 43 44 this.x = v; 45 46 this.RaisePropertyChanged(() => this.TextBoxText); 47 } 48 } 49 } 50}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私が思いつく方法は2つ

  1. TextBoxDataContextMainWindowViewModelが保持するdoubleValidationクラスのインスタンスを設定する。

  2. バイパスするプロパティを作る。

private static readonly int initial = 0; private doubleValidation xTextBoxText = new doubleValidation(initial); private doubleValidation yTextBoxText = new doubleValidation(initial); ・・・ public string XTextBoxText { get { return xTextBoxText.TextBoxText; } set { xTextBoxText.TextBoxText = value; } } public string YTextBoxText { get { return yTextBoxText.TextBoxText; } set { yTextBoxText.TextBoxText = value; } } ・・・ public void Initialize() { CompositeDisposable.Add(new PropertyChangedEventListener(this.xTextBoxText, (sender, e) => { if (e.PropertyName == "TextBoxText") { RaisePropertyChanged("XTextBoxText"); } })); CompositeDisposable.Add(new PropertyChangedEventListener(this.yTextBoxText, (sender, e) => { if (e.PropertyName == "TextBoxText") { RaisePropertyChanged("YTextBoxText"); } })); } ・・・

投稿2016/07/14 07:20

wakuwaku

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

picko

2016/07/14 07:29

ありがとうございます!! さきほどの、Modelを使うのと組み合わせる必要が出てきて、また整理してからご相談しそうな予感です。 感謝。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問