0

わかりません。わかりません。リストボックスにアイテムが表示されない理由を教えてください(現在、「empty」と「stuff」の2つの文字列である必要があります)。

XAML:

<Window.DataContext>
    <Windows:SettingsWindowModel x:Name="model"/>
</Window.DataContext>

<Window.Resources>
    <DataTemplate x:Key="ListItemTemplate">
        <ListBoxItem Content="{Binding}"  />
    </DataTemplate>
</Window.Resources>

<ListBox Name="listBoxActivities" SelectionChanged="ListBoxActivitiesSelectionChanged"
 ItemsSource="{Binding Path=IgnoredActivities}"
 HorizontalAlignment="Left" VerticalAlignment="Top" MinHeight="40" MinWidth="200"
 Padding="5,100,5,0" Height="100" Margin="0,207,0,0" ItemTemplate="{StaticResource ListItemTemplate}" />

SettingsWindowModelの場合:

    private ObservableCollection<String> _ignoredActivities;
    public ObservableCollection<String> IgnoredActivities
    {
        get
        {
            if (_ignoredActivities == null)
            {
                // empty
                _ignoredActivities = new ObservableCollection<String>() { "empty","stuff" };
            }
            return _ignoredActivities;
        }
    }

さらに知っておくべきことはありますか?何を忘れましたか?

編集:おそらく、VisualStudio+ReSharperにもアンダースコアやコンパイルエラーが表示されないことを追加する必要があります。警告すらありません。

4

6 に答える 6

1

申し訳ありませんが、データは常にそこにありました。問題は視覚的な詳細にありました。パディングは ListBox (または項目) のサブコンテナーにも適用されたため、項目はリストの一番上にありませんでした。私は ListBox の高さだけを持っているので、アイテムは常に ListBox の表示可能な高さより下でした。デバッグするスタンジ。とにかく答えてくれてありがとう!

于 2012-12-03T08:28:06.400 に答える
0

コードビハインドでコントロールのDataContextも設定してみてください。

Xaml       - <ListBox Name="myListBox" ItemsSource="{Binding IgnoredActivities}"/>    
CodeBehind - myListBox.DataContext=this;
于 2012-12-03T02:32:26.177 に答える
0

1) DataTemplate を設定する必要はありません

2) ビュー (aaaaa.xaml.cs) の DataContext が ViewModel (bbbbb.cs、IgnoredActivities を含む) であると確信していますか?

次のようになります。

aaaaa.xaml:

<ListBox ItemsSource="{Binding IgnoredActivities}" />

aaaaa.xaml.cs:

public partial class aaaaa : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new bbbbb();
    }
}

bbbbb.cs:

    public class bbbbb : INotifyPropertyChanged
    {
        public bbbbb()
        {
            IgnoredActivities.Add("empty");
            IgnoredActivities.Add("stuff");
        }

        private ObservableCollection<String> _ignoredActivities;
        public ObservableCollection<String> IgnoredActivities
        {
            get
            {
                if (_ignoredActivities == null)
                {
                    // empty
                    _ignoredActivities = new ObservableCollection<String>() { "empty","stuff" };
                }
                return _ignoredActivities;
            }
        }

            #region INotifyPropertyChanged Members

            public event PropertyChangedEventHandler PropertyChanged;
            private void RaisePropertyChanged(string _Prop)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(_Prop));
            }

            #endregion
    }
}
于 2012-11-30T15:25:10.230 に答える
0

このステートメントを使用すると、ウィンドウの「モデル」という名前のコントロールのプロパティ「IgnoredActivities」にバインドされます。

ItemsSource="{Binding ElementName=model, Path=IgnoredActivities}"

ViewModel を操作する場合は、それらをコントロールの DataContext として設定します。

<ListBox ItemsSource="{Binding IgnoredActivities}">
    <ListBox.DataContext>
        <local:MyViewModel/>
    </ListBox.DataContext>        
</ListBox>

ソースが指定されていないバインディング ("{Binding PathToMyPropert}") は、親コントロールから継承されたコントロールの DataContext にデフォルト設定されます。したがって、あなたの場合、ViewModel を Window の DataContext に設定して、そのすべての子で利用できるようにすることができます。

<Window>
    <Window.DataContext>
        <local:MyViewModel/>
    </Window.DataContext>        

    <ListBox ItemsSource="{Binding IgnoredActivities}"/>    
</Window>
于 2012-11-30T15:27:01.443 に答える
0

次のようにしてみてください。

<ItemsControl ItemsSource="{Binding Path=IgnoredActivities}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <ListBox />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
       <DataTemplate>
           <ListBoxItem Content="{Binding}"  />
       </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
于 2012-11-30T16:12:43.607 に答える
0

ElementNameそのバインディング プロパティを取り除きます。WPF コントロールにバインドするために使用されます。簡単に設定ItemsSource={Binding IgnoredActivities}

于 2012-11-30T15:51:32.140 に答える