WPF - 无法在窗口中显示ObservableCollection

时间:2010-01-09 18:45:45

标签: wpf data-binding collections binding

我有一个ObservableCollection,似乎无法在窗口中显示。这是代码:

视图模型:

public class QueryParamsVM : DependencyObject
{
    public string Query { get; set; }

    public QueryParamsVM()
    {
        Parameters = new ObservableCollection<StringPair>();
    }

    public ObservableCollection<StringPair> Parameters
    {
        get { return (ObservableCollection<StringPair>)GetValue(ParametersProperty); }
        set { SetValue(ParametersProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Parameters.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ParametersProperty =
        DependencyProperty.Register("Parameters", typeof(ObservableCollection<StringPair>), typeof(QueryParamsVM), new UIPropertyMetadata(null));
}


public class StringPair: INotifyPropertyChanged
{
    public string Key { get; set; }
    public string Value
    {
        get { return _value; }
        set { _value = value; OnPropertyChanged("IsVisible"); }
    }
    private string _value;

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

Window xaml:

<Window x:Class="WIAssistant.QueryParams"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Query Parameters" Height="390" Width="504">

    <Grid>
        <ListBox DataContext="{Binding Parameters}" >

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Key}"  ></TextBlock>
                        <TextBlock Text="{Binding Value}"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>        
    </Grid>
</Window>

主叫代码:

 // Get Project Parameters
 QueryParams queryParams = new QueryParams();
 queryParams.ViewModel.Parameters.Add(new StringPair {Key = "@project", Value = ""});
 queryParams.ShowDialog();

我已经尝试将调试语句放在绑定中。参数绑定,但Value绑定永远不会被调用。

有关如何让我的列表显示的任何想法?

2 个答案:

答案 0 :(得分:3)

尝试

<ListBox ItemsSource="{Binding Parameters}">

<ListBox DataContext="{Binding Parameters}" ItemsSource="{Binding}">

答案 1 :(得分:1)

这里奇怪的事了:

public string Value
{
    get { return _value; }
    set { _value = value; OnPropertyChanged("IsVisible"); }
}

您正在另一家酒店举办房产变更活动。应该是:

public string Value
{
    get { return _value; }
    set { _value = value; OnPropertyChanged("Value"); }
}