0

ListBoxにバインドされたカスタムオブジェクトの監視可能なコレクションから表示を取得できません。これは、ビューモデルに文字列コレクションがある場合は正常に機能しますが、カスタムオブジェクトを介してプロパティにアクセスしようとすると名前が表示されません。出力ウィンドウにエラーが表示されません。

これが私のコードです:

カスタムオブジェクト

public class TestObject
{
    public ObservableCollection<string> List { get; set; }

    public static TestObject GetList()
    {
        string[] list = new string[] { "Bob", "Bill" };

        return new TestObject
        {
            List = new ObservableCollection<string>(list)
        };
    }
}

Xaml

<Window x:Class="TestWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <ListBox Height="100" HorizontalAlignment="Left" Margin="120,61,0,0" Name="listBox1" VerticalAlignment="Top" Width="120" ItemsSource="{Binding Path=TObj.List}" />
</Grid>

Xaml.cs

    public partial class MainWindow : Window
{
    private ModelMainWindow model;

    public MainWindow()
    {
        InitializeComponent();
        model = new ModelMainWindow();
        this.DataContext = model;
        this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
    }

    public void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        this.model.Refresh();
    }
}

ViewModel

    public class ModelMainWindow : INotifyPropertyChanged
{
    private TestObject tObj;

    public event PropertyChangedEventHandler PropertyChanged;

    public TestObject TObj
    {
        get
        {
            return this.tObj;
        }

        set
        {
            this.tObj = value;
            this.Notify("Names");
        }
    }

    public void Notify(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }

    public void Refresh()
    {
        this.TObj = TestObject.GetList();
    }
}
4

2 に答える 2

1

プライベートプロパティにバインドできません。また、変更通知は間違ったプロパティを対象としています。に変更"Names"して"TObj"ください。List(また、プロパティをget-only(フィールドに基づく)にするか、変更が失われないようにreadonly実装することをお勧めします)INoptifyPropertyChanged

于 2012-06-01T15:10:20.800 に答える
0

あなた Listはプライベートです。パブリックプロパティにします。そうしないと、WPFはそれを見ることができません。

于 2012-06-01T15:10:13.160 に答える