2017-06-17 18 views
0

初めてです。また、プログラマーではなく、スクリプター/デザイナーでもあります。UWP 10(xaml) - ネストされた観察可能なコレクションを持つMVVM - リストボックス

とにかく。私はそのitemsSourceのための観察可能なコレクションを使用するリストボックスを持っています。新しいエントリを追加して保存することは問題ではなく、そのすべてが機能します。変更を(INotifyChangedなどを介して)行うと、すべて正常に動作します。

XAML:

<ListBox x:Name="ProjectsListedView" 
       ItemsSource="{Binding Companies.ProjectsListed}" 
       SelectedValue="{Binding ProjectsName}" 
       SelectedIndex="-1" 
       SelectionMode="Extended"> 
</Listbox> 

この部分の作品。 (選択した値/インデックスを除く)

ProjectsListedは、企業の一部である観察可能なコレクションです。 そう考えているのです。会社を選択すると、その会社のリストされたプロジェクトが表示されます。これはインテントとして機能します。

しかし、私の人生にとっては、「選択されたアイテム」が正しく機能することができません。

<Setter Property="IsSelected" Value="{Binding IsSelected}"/> 

とさえを::

<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/> 

両方didntの仕事を私が試みた何

。いずれかの方法。奇妙なことは..選択が行われていることです。 リストボックスが作成され、コレクションが(XMLファイルから)追加されたとき。アイテムを選択して、選択したアイテムからテキストボックスに情報を取得できます。例:

<TextBox Text="{Binding SelectedItem.ProjectName, Mode=TwoWay, ElementName=ProjectsListedView}" 
       Style="{StaticResource TB_M}" 
       Width="450" 
       Name="ProjectNameInput" 
       PlaceholderText="" 
       Grid.Row="0"/> 

だから何が問題です: 「選択した項目が」削除され傾けます。 `

public async static Task DeleteProjectFile(this Company companies) 
    { 
     var file = await GetCompanyFile(companies.CompanyName); 
     if (file == null) 
     { 
      var folder = await GlobalFolder(); 
      file = await folder.CreateFileAsync(companies.CompanyName + GlobalFileExtension, CreationCollisionOption.ReplaceExisting); 
     } 
     Projects project = new Projects(); 

     companies.ProjectsListed.Remove(project); 
    } 

誰でも正しい方向に指し示すことができます(例は非常に高く評価されます)。より多くのコードが必要な場合は、お問い合わせください。前述のように、これは私の最初の質問/投稿です。

大切にしてください。

+0

この行は何をする予定ですか? 'companies.ProjectsListed.Remove(project);'一見すると、 'project'は新しく作成されたオブジェクトであり、observablecollectionには存在しないので、この行は単に例外をスローします。 – kennyzx

+0

おそらくリスト/ xmlfileからプロジェクトを削除するべきです。不思議にも、(リストボックスに向かう私の前に)働いていた時がありました。そのため私はそれを振り返っていません。 Companies = "parent"、ProjectsListed = observablecollection&remove =配列/コレクションからアイテムを削除するために使用されるコマンド。また、ボタンを押したときに例外がスローされません。だから.. – SdNA

+0

@kennyzxさんのコメントによると、あなたの問題を更新して解決しましたか?それでも問題がある場合は、私たちのテスト用に[mcve]を持っていましたか? –

答えて

0

私はこれをほとんど修正することができました。

削除部kennyzx

public async static Task DeleteProjectFile(this Company companies) 
    { 
     var file = await GetCompanyFile(companies.CompanyName); 
     if (file == null) 
     { 
      var folder = await GlobalFolder(); 
      file = await folder.CreateFileAsync(companies.CompanyName + GlobalFileExtension, CreationCollisionOption.ReplaceExisting); 
     } 

      companies.ProjectsListed.RemoveAt(0); 
    } 

によって置かれたコメントからの友人の助けと少しのおかげでそれが選択を削除しないかもしれませんが、非常に少なくとも、それは、エントリを削除しています。

そして、「選択項目」を記憶するための修正は、奇妙な方法の少しかもしれないが、私はちょうど余分なXMLが別の場所に

public async void ProjectsListedView_SelectionChanged(object sender, SelectionChangedEventArgs e) 

にシリアライズ作成します。そして、 "フレーム"が呼ばれているたびに、これをリロードします。 実際に選択されたセッター(ハイライト)は機能していませんが、すべてが固定されています。

お手数をおかけしていただきありがとうございます。

0

私は問題がここにあると思う:SelectionMode="Extended"

(アンカーが動作しない場合、のselectionModeの検索を)あなたが見hereを取る場合は、この行を見つけることができます:のselectionModeが複数または拡張した場合

を取得するためにselectedItemsのプロパティを使用します選択されたアイテム。

複数選択が必要ない場合は、SelectionModeSingleに変更してください。それ以外の場合はSelectedItemの代わりにSelectedItemsプロパティを使用する必要があります。

+0

を参照してください。まず、お返事いただきありがとうございます。残念ながら、これは動作しません。 uwpが選択を "偽造"しているように感じます。それが示すように、それは観測可能なコレクション内の情報を示しますが、それだけです。私の会社のリストボックス(MRUベース)は正常に動作します。しかし、それは観察可能なコレクションでもネストされていません。 – SdNA

関連する問題