3

私は次のxamlを持っています-

<Window x:Class="DataTemplateTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="400" Width="600" Loaded="Window_Loaded">    
    <Grid>
        <ListBox Height="380" Margin="10,12,0,0" Width="355"/>
    </Grid>
</Window>  

および次のコードビハインド-

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _nameList = new List<string>
                        {
                            "X",
                            "Y",
                            "Z"
                        };
    }

    private List<string> _nameList;
    public List<string> NameList
    {
        get { return _nameList; }
    }
}  

コードビハインドからではなく、xamlからリストボックスのNameListとしてを設定したいと思います。それ、どうやったら出来るの? ItemsSource

編集:私はMVVMを知っています-これを行う方法。しかし、それは私が求めていることでは ありません。

編集:それは私がMVVMかそこらが好きではないということではありません。いくつかの簡単なテストをしている間、私はこれを行う方法がわからないことに気づきました。だから、それが可能かどうか疑問に思って、学ぼうとしています。とにかくそれを使用することは可能StaticResourceですか?

4

1 に答える 1

2

ViewModelsを使用したくない「MVVM-wayを実行しない」ことを意図している場合は、次の手順で「コードビハインド」にデータバインドできます。

XAMLでバインディングを設定します。

<ListBox ItemSource="{Binding NameList}"/>

そして、リストにデータを入力した後、たとえば次DataContextのようにに設定します。thisWindow_Loaded

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    _nameList = new List<string>
                    {
                        "X",
                        "Y",
                        "Z"
                    };
    DataContext = this;
}

編集:設定したくない場合はDataContext、ウィンドウに直接バインドできます。

<Window Name="window" ... />

  <ListBox  ItemsSource="{Binding NameList, ElementName=window}"/>

または、AncestorBindingを次のように使用できます

<ListBox ItemsSource="{Binding NameList, RelativeSource={RelativeSource AncestorType=Window}}"/>

ただし、どちらの場合も、loadedイベントでリストにデータを入力したという事実によってビューに通知されないため、リストは空になります。したがって、INPCを使用して、"NameList"プロパティが変更されたことを通知する必要があります。

于 2012-09-10T09:11:51.763 に答える