WPF/WP7에서 문자열 목록을 ListBox로 데이터 바인딩하려면 어떻게 해야 합니까?
문자열 값 목록을 목록 상자에 바인딩하여 값이 한 줄씩 나열되도록 하려고 합니다.지금은 다음과 같이 사용합니다.
<ListBox Margin="20" ItemsSource="{Binding Path=PersonNames}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Id}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
하지만 나는 문자 블록에 무엇을 넣어야 할지 모르겠어, 대신에.Id
사용자 지정 클래스가 아니라 모두 문자열 값이기 때문입니다.
또한 메인 페이지에서 사용자 이름을 찾을 필요가 없다고 불평합니다.사용자 이름.
데이터 컨텍스트를 다음으로 설정합니다.
DataContext="{Binding RelativeSource={RelativeSource Self}}"
제가 잘못하고 있다고요?
간단히 말해서 당신의 아이템.소스는 다음과 같이 바인딩됩니다.
YourListBox.ItemsSource = new List<String> { "One", "Two", "Three" };
XAML은 다음과 같아야 합니다.
<ListBox Margin="20" Name="YourListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
업데이트:
이것은 DataContext를 사용할 때 해결책입니다.다음 코드는 페이지의 데이터 컨텍스트에 전달할 뷰 모델과 데이터 컨텍스트의 설정입니다.
public class MyViewModel
{
public List<String> Items
{
get { return new List<String> { "One", "Two", "Three" }; }
}
}
//This can be done in the Loaded event of the page:
DataContext = new MyViewModel();
이제 XAML은 다음과 같습니다.
<ListBox Margin="20" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
이 접근 방식의 장점은 MyViewModel 클래스에 훨씬 더 많은 속성이나 복잡한 개체를 넣고 XAML에서 추출할 수 있다는 것입니다. 예를 들어 사용자 개체 목록을 전달하려면 다음과 같이 하십시오.
public class ViewModel
{
public List<Person> Items
{
get
{
return new List<Person>
{
new Person { Name = "P1", Age = 1 },
new Person { Name = "P2", Age = 2 }
};
}
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
그리고 XAML:
<ListBox Margin="20" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=Name}" />
<TextBlock Text="{Binding Path=Age}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
사용자 이름 코드를 보여주셔야 합니다. 질문 내용을 이해할 수 없지만 다음과 같이 바인딩할 수 있습니다.
<TextBlock Text="{Binding Path=.}"/>
또는
<TextBlock Text="{Binding}"/>
이것은 목록의 현재 요소에 바인딩됩니다(사용자 이름이 문자열 목록이라고 가정).그렇지 않으면 목록에 클래스 이름이 표시됩니다.
항목 소스가 문자열 항목으로 열거 가능한 경우 다음을 사용합니다.
<TextBlock Text="{Binding}"></TextBlock>
이 구문은 모든 개체에 사용할 수 있습니다.일반적으로 ToString() - 메서드는 값을 가져오기 위해 호출됩니다.이것은 많은 경우에 매우 편리합니다.그러나 변경 알림은 발생하지 않습니다.
텍스트 블록 컨트롤을 ListBox의 일부로 명시적으로 정의할 필요 없이 이 작업을 수행할 수 있습니다(더 나은 형식 지정을 원하지 않는 경우).트리거할 바인딩을 얻는 비결은ObservableCollection<string>
대신에List<string>
창 1.xaml
<ListView Width="250" Height="50" ItemsSource="{Binding MyListViewBinding}"/>
Window1.xaml.cs
public Window1()
{
InitializeComponent();
DataContext = this;
// Need to initialize this, otherwise you get a null exception
MyListViewBinding = new ObservableCollection<string>();
}
public ObservableCollection<string> MyListViewBinding { get; set; }
// Add an item to the list
private void Button_Click_Add(object sender, RoutedEventArgs e)
{
// Custom control for entering a single string
SingleEntryDialog _Dlg = new SingleEntryDialog();
// OutputBox is a string property of the custom control
if ((bool)_Dlg.ShowDialog())
MyListViewBinding.Add(_Dlg.OutputBox.Trim());
}
언급URL : https://stackoverflow.com/questions/9391746/how-can-i-data-bind-a-list-of-strings-to-a-listbox-in-wpf-wp7
'it-source' 카테고리의 다른 글
Eclipse JUNO가 시작되지 않습니다. (0) | 2023.05.11 |
---|---|
로컬 Git 브랜치를 원격의 마스터 브랜치로 푸시하려면 어떻게 해야 합니까? (0) | 2023.05.11 |
이클립스에서 AVD 에뮬레이터의 크기를 조정하는 방법은 무엇입니까? (0) | 2023.05.11 |
.(C# 또는 VB에서 항상 합법적입니다.그물? (0) | 2023.05.11 |
튜플 대신 목록 출력이 있는 Zip (0) | 2023.05.11 |