■68489 / inTopicNo.1) |
C# WPFのデータバインディング |
□投稿者/ はなこさん (1回)-(2013/10/23(Wed) 09:37:56)
|
分類:[C#]
VisualStudio2013 C# .NET4.5を使用してWPFの勉強をしています。
ボタンを押したタイミングで複数の引数をC#側のコードに渡して処理を行いたいのですが
データバインドがうまく出来ません。
具体的に言うと、
ボタンを押したタイミングで固定文字列と_textBox1.TextをC#側のコードに渡し
VisualStudioの出力ウインドウにWriteLineすると
固定文字列は正しく表示されますが、_textBox1.Textはnullになってしまいます。
もうひとつTextBoxを追加して
<TextBox Text="{Binding ElementName=_textBox1, Path=Text}"/>
とすると正しくバインドされるので書式自体は間違っていないと思うのですが…
どこが間違っているのでしょうか。
namespace WpfApplication4
{
public class args : DependencyObject
{
public static readonly DependencyProperty arg1Property = DependencyProperty.Register("arg1", typeof(object), typeof(args));
public static readonly DependencyProperty arg2Property = DependencyProperty.Register("arg2", typeof(object), typeof(args));
public static readonly DependencyProperty arg3Property = DependencyProperty.Register("arg3", typeof(object), typeof(args));
public static readonly DependencyProperty arg4Property = DependencyProperty.Register("arg4", typeof(object), typeof(args));
public object arg1 { get { return (object)this.GetValue(arg1Property); } set { this.SetValue(arg1Property, value); } }
public object arg2 { get { return (object)this.GetValue(arg2Property); } set { this.SetValue(arg2Property, value); } }
public object arg3 { get { return (object)this.GetValue(arg3Property); } set { this.SetValue(arg3Property, value); } }
public object arg4 { get { return (object)this.GetValue(arg4Property); } set { this.SetValue(arg4Property, value); } }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
public void ExecutedButton(object sender, ExecutedRoutedEventArgs e)
{
Func<object, string> tostring = (o) => (o == null) ? "null" : string.Format("\"{0}\"", o);
var prm = (args)e.Parameter;
Console.WriteLine("arg1={0}, arg2={1}, arg3={2}, arg4={3}", tostring(prm.arg1), tostring(prm.arg2), tostring(prm.arg3), tostring(prm.arg4));
}
}
}
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:winput="clr-namespace:System.Windows.Input;assembly=PresentationCore"
xmlns:local="clr-namespace:WpfApplication4"
Title="MainWindow" Height="200" Width="200">
<Window.Resources>
<winput:RoutedCommand x:Key="routedCommandButton"/>
</Window.Resources>
<Window.CommandBindings>
<CommandBinding
Command="{StaticResource routedCommandButton}"
Executed="ExecutedButton"/>
</Window.CommandBindings>
<Grid>
<TextBox Name="_textBox1" HorizontalAlignment="Left" Height="23" Margin="10,10,0,0" TextWrapping="Wrap" Text="ok1" VerticalAlignment="Top" Width="120"/>
<Button Content="Button" HorizontalAlignment="Left" Margin="10,38,0,0" VerticalAlignment="Top" Width="75"
Command="{Binding Mode=OneWay, Source={StaticResource routedCommandButton}}">
<ButtonBase.CommandParameter>
<local:args
arg1="{Binding ElementName=_textBox1, Path=Text}"
arg2="ok2"
arg3="ok3"/>
</ButtonBase.CommandParameter>
</Button>
</Grid>
</Window>
|
|