

問題はListViewなどのItemSourceからDataTemplateでUserControlを呼び出したとき、その中のBindingがうまくいかないことです。

作成したUserControlは以下の通りで、

MyUserControl1.cs

[code]

    namespace EditableTextBox
    {
    public sealed partial class MyUserControl1 : UserControl
    {
        public string Text
        {
            get
            {
                return (string)GetValue(TextProperty);
            }
            set
            {
                SetValue(TextProperty, value);
            }
        }
    
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(MyUserControl1), new PropertyMetadata(null));
    
        public MyUserControl1()
        {
            this.InitializeComponent();
            this.DataContext = this;
        }
    
        private void TextBlock_Tapped(object sender, TappedRoutedEventArgs e)
        {
            Block.Visibility = Visibility.Collapsed;
            Box.Visibility = Visibility.Visible;
        }
    
        private void Box_LostFocus(object sender, RoutedEventArgs e)
        {
            Block.Visibility = Visibility.Visible;
            Box.Visibility = Visibility.Collapsed;
        }
    }
    }
    
[/code]

MyUsercontrol1.xaml

[code]

    <UserControl
    x:Class="EditableTextBox.MyUserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:EditableTextBox"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300"
    d:DesignWidth="400">
    
    <Grid>
        <TextBlock Visibility ="Visible" Name="Block" Text="{Binding Text, Mode=TwoWay}" Tapped="TextBlock_Tapped"/>
        <TextBox Visibility="Collapsed" Name="Box" Text="{Binding Text, Mode=TwoWay}" LostFocus="Box_LostFocus"/>
    </Grid>
    
[/code]

そしてUserControlを呼び出すためのMainPage.xamlが以下の通りです。

MainPage.xaml.cs

[code]

    namespace EditableTextBox
    {
    /// <summary>
    /// それ自体で使用できる空白ページまたはフレーム内に移動できる空白ページ。
    /// </summary>
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            test = "test";
            test2 = new List<string>();
            test2.Add("1");
            test2.Add("2");
            this.DataContext = this;
        }
    
        public string test { get; set; }
        public List<string> test2 { get; set; }
    }
    }
    
[/code]

MainPage.xaml

[code]

    <Page
    x:Class="EditableTextBox.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:EditableTextBox"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    
    <Grid>
        <local:MyUserControl1 Text="{x:Bind test,Mode=TwoWay}" HorizontalAlignment="Left" Margin="304,227,0,0" VerticalAlignment="Top" Width="568" Height="35"/>
        <ListView ItemsSource="{x:Bind test2,Mode=TwoWay}" HorizontalAlignment="Left" Height="416" Margin="309,380,0,0" VerticalAlignment="Top" Width="617">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="x:String">
                    <local:MyUserControl1 Text="{Binding}"></local:MyUserControl1>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
    
[/code]

本来なら  
[![画像の説明をここに入力](https://i.stack.imgur.com/T5Fsw.png)](https://i.stack.imgur.com/T5Fsw.png)  
と表示させたいのですが、

現在のコードですと  
[![画像の説明をここに入力](https://i.stack.imgur.com/9EDmc.png)](https://i.stack.imgur.com/9EDmc.png)  
のように表示されます。  
ご教示お願いいたします。


CC BY-SA 4.0
2018-08-19T22:43:42.287
47635
2018-08-21T22:28:18.343
2018-08-20T00:27:40.493
2238
8003
question
c# uwp
DataTemplate中におけるUserControlのBinding


ユーザーコントロールの `this.DataContext = this;` を削除してみて下さい。  
DataContext が意図しないものになっているだけの様に思えます。


CC BY-SA 4.0
2018-08-21T22:28:18.343
47707
2018-08-21T22:28:18.343
28174
47635
answer