2016-10-10 1 views
0

私はバインディングとリストビューを持っているUWPに結合します。は(C#の)

私はこれを好きです。

public RootObject allRoundsSelectedItem; 
    public RootObject AllRoundsSelectedItem 
    { 
     get { return allRoundsSelectedItem; } 
     set { allRoundsSelectedItem = value; OnPropertyChanged();} 
    } 


    private void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     handler?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 


    private void OrdersListView_ItemClick(object sender, ItemClickEventArgs e) 
    { 

    } 

私は、この行にset { allRoundsSelectedItem = value; OnPropertyChanged();}

をブレークポイントを設定すると、私は私が持っている必要が値を持っていることがわかります。

別のListViewにデータを入力しようとしました。そのため

ここ

コード:

<ScrollViewer HorizontalAlignment="Left" Height="667" Margin="415,54,-124,-1" VerticalAlignment="Top" Width="989"> 
     <ListView x:Name="DetailsListView" ItemsSource="{Binding AllRoundsSelectedItem}"> 
      <ListView.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Height="667" Width="989"> 
      <Grid x:Name="DetailGrid" Height="667" Width="989" VerticalAlignment="Top" > 
       <Grid HorizontalAlignment="Left" Height="44" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock1" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Время и дата заказа" VerticalAlignment="Top" Height="44" Width="214" FontSize="23"/> 
           <TextBlock x:Name="textBlock2" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding date_created}" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,44,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock3" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Статус" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
           <TextBlock x:Name="textBlock4" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding status }" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,88,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock5" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Осталось времени" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock6" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,132,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock7" HorizontalAlignment="Left" TextWrapping="Wrap" Text="На когда" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock8" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding billing.city}" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,176,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock9" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Сумма" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock10" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding total}" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,220,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock11" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Имя" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock12" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding billing.first_name}" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,264,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock13" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Телефон" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock14" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding billing.phone}" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,308,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock15" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Адрес" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock16" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding billing.address_1}" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,352,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock17" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Количество персон" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock18" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="{Binding billing.postcode}" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,396,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock19" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Откуда" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock20" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,440,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock21" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Состав заказа" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock22" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,484,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock23" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Приметка для кухни" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock24" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
       <Grid HorizontalAlignment="Left" Height="44" Margin="0,528,0,0" VerticalAlignment="Top" Width="989" BorderBrush="#FFFBF8F8" BorderThickness="0,0,1,1"> 
        <TextBlock x:Name="textBlock25" HorizontalAlignment="Left" TextWrapping="Wrap" Text="Приметка для курьера" VerticalAlignment="Top" Height="44" Width="360" FontSize="23"/> 
        <TextBlock x:Name="textBlock26" HorizontalAlignment="Left" Margin="500,0,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Height="44" Width="360"/> 
       </Grid> 
      </Grid> 
     </StackPanel></DataTemplate></ListView.ItemTemplate></ListView> 

しかし、何も示しています。

私のトラブルはどこですか?

ありがとうございました!

+0

私はあなたの質問を完全に理解していないと思うが、それをクリックしてViewからデータを取得するには、Commandを使用することができます。 –

+0

あなたは私の答えをチェックしましたか?何の問題? –

答えて

1

あなたの質問はあまり明確ではありませんでしたので、達成しようとしていたことは推測できます。ある種のmaster-detailインターフェイスが必要なように見えます。ここでは、リスト(マスター)から項目を選択し、その項目(詳細)のデータを編集するためのコントロールが表示されます。

あなたの最初のリストビューは上手く見えます(そしてバインディングはあなたの言ったように機能します)。しかし、なぜあなたは選択された項目の詳細を表示するために別のListViewを使用していますか? ListViewはデータのリストを表示するためのものですが、RootObjectは配列クラスまたはコレクションクラスではないようです(私は間違っているかもしれませんが、クラス定義はわかりません)。 ListViewは使用しないでくださいが、使用するものはパネルのDataSourceプロパティにAllRoundsSelectedItemをバインドする必要があります。

+0

多分あなたはItemsSourceについて話しますか? –

0

解決方法1:私は主に@Decade月に同意するが、最後の行のために、あなたが使用StackPanelのないDataSourceプロパティがありません、私はこれはおそらくタイプミスで、それはDataContextされるべきだと思います。とにかく、ここで私は、このソリューションのデモを与えるために、この答えを書いている:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <ListView x:Name="OrdersListView" IsItemClickEnabled="True" SelectionMode="Single" 
       ItemClick="OrdersListView_ItemClick" SelectedItem="{Binding AllRoundsSelectedItem, Mode=TwoWay}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding ItemName}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
    <ScrollViewer Grid.Column="1"> 
     <StackPanel x:Name="Detail" Grid.Column="1" > 
      <TextBlock Text="{Binding ItemName}" FontSize="30" Foreground="Red" /> 
      <TextBlock Text="{Binding Paramether1}" Margin="0,15" FontSize="20" /> 
      <TextBlock Text="{Binding Paramether2}" FontSize="20" /> 
      <TextBlock Text="{Binding Paramether3}" Margin="0,15" FontSize="20" /> 
      <TextBlock Text="{Binding Paramether4}" FontSize="20" /> 
      <TextBlock Text="{Binding Paramether5}" Margin="0,15" FontSize="20" /> 
     </StackPanel> 
    </ScrollViewer> 
</Grid> 

あなたのレイアウトは、このようであれば、あなたはこのように背後にとOrdersListView_ItemClickイベントコードにコードのあなたのほとんどを保つことができます:

private void OrdersListView_ItemClick(object sender, ItemClickEventArgs e) 
{ 
    AllRoundsSelectedItem = e.ClickedItem as RootObject; 
    Detail.DataContext = AllRoundsSelectedItem; 
} 

解決方法2:彼らが選択できるように、あなたはまだ詳細を表示するListViewを使用する場合、または何か他のもの、することができます。このようなコード例について:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <ListView x:Name="OrdersListView" IsItemClickEnabled="True" SelectionMode="Single" 
       ItemClick="OrdersListView_ItemClick" SelectedItem="{Binding AllRoundsSelectedItem, Mode=TwoWay}"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding ItemName}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
    <ListView x:Name="DetailsListView" ItemsSource="{Binding AllRoundsSelectedItem}" Grid.Column="1"> 
     <ListView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <TextBlock Text="{Binding}" FontSize="20" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 
</Grid> 

そしてAllRoundsSelectedItemのタイプはListまたはOberservableCollectionである必要があり、それはあなたがこのように例えば背後にあるコードを変更する必要があることを意味:私の側で

public sealed partial class MainPage : Page, INotifyPropertyChanged 
{ 
    public MainPage() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    private ObservableCollection<RootObject> collection = new ObservableCollection<RootObject>(); 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      collection.Add(new RootObject 
      { 
       ItemName = "Item " + i, 
       Paramether1 = "Paramether1 " + i, 
       Paramether2 = "Paramether2 " + i, 
       Paramether3 = "Paramether3 " + i, 
       Paramether4 = "Paramether4 " + i, 
       Paramether5 = "Paramether5 " + i, 
      }); 
     } 
     OrdersListView.ItemsSource = collection; 
    } 

    public ObservableCollection<string> allRoundsSelectedItem; 

    public event PropertyChangedEventHandler PropertyChanged; 

    public ObservableCollection<string> AllRoundsSelectedItem 
    { 
     get { return allRoundsSelectedItem; } 
     set 
     { 
      allRoundsSelectedItem = value; 
      OnPropertyChanged(); 
     } 
    } 

    private void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     var handler = PropertyChanged; 
     handler?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    private void OrdersListView_ItemClick(object sender, ItemClickEventArgs e) 
    { 
     var item = e.ClickedItem as RootObject; 
     AllRoundsSelectedItem = new ObservableCollection<string> 
     { 
      item.ItemName,item.Paramether1, 
      item.Paramether2, item.Paramether3, 
      item.Paramether4, item.Paramether5, 
     }; 
    } 
} 

RootObjectクラスは、このようなものです:

public class RootObject 
{ 
    public string ItemName { get; set; } 
    public string Paramether1 { get; set; } 
    public string Paramether2 { get; set; } 
    public string Paramether3 { get; set; } 
    public string Paramether4 { get; set; } 
    public string Paramether5 { get; set; } 
} 

他の解決策がありますが、xamlコードまたはAllRoundsSelectedItemのデータ型を変更する必要があります。