WPF 콤보 상자 디스플레이 구성원 경로
네, 다른 질문들을 봤는데 답을 못 받아서 여기 계신 분들이 그러셨으면 좋겠네요.
DisplayMemberPath 속성이 항목에 바인딩되지 않는 이유는 무엇입니까?
<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" DisplayMemberPath="{Binding Name}" SelectedItem="{Binding Prompt}"/>
추적 출력은 IEnumberable의 실제 항목이 아닌 IEnumberable을 보유하는 클래스에 바인딩하려고 시도하고 있음을 보여줍니다.xaml에 줄을 한 번도 추가하지 않고 콤보 박스를 채우는 간단한 방법이 헷갈립니다.
단순히 항목 소스의 개체에 대한 ToString()을 호출합니다.저는 다음과 같은 일을 하고 있습니다.
<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" SelectedItem="{Binding Prompt}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
하지만 제 생각에는 그렇게 간단한 일에는 무리가 있습니다.상대 소스 바인딩을 사용할 수 있습니까?
DisplayMemberPath
각 항목의 표시 문자열 속성 경로를 지정합니다.당신의 경우, 당신은 그것을"Name"
,것은 아니다."{Binding Name}"
.
클래스의 데이터에 바인딩되어 있지 않습니다. 멤버 "이름"에 의해 이름이 지정된 클래스 멤버로부터 데이터를 가져오라고 하는 것입니다. 따라서 인스턴스가item.Name == "steve"
그것은 데이터를 얻으려고 노력하고 있습니다.item.steve
.
이 작업을 수행하려면 MemberPath에서 바인딩을 제거해야 합니다.로 변경MemberPath = "Name"
이것은 멤버 "이름"으로부터 데이터를 가져오라고 말합니다.그렇게 부르면 됩니다.item.Name
,것은 아니다.item.steve
.
변경해야 합니다.MemberPath="{Binding Name}"
로.MemberPath="Name"
그러면 효과가 있을 겁니다.
DisplayMemberPath를 제거한 다음 TextBlock에서 경로를 설정할 수 있습니다.
DisplayMemberPath는 ItemTemplate가 없을 때 사용합니다.
또는 ItemTemplate를 제거하고 DisplayMemberPath를 사용할 수 있습니다. 이 경우 기본적으로 텍스트 블록이 만들어집니다.둘 다 하는 것은 추천하지 않습니다.
<TextBlock text="{Binding Path=Name, Mode=OneWay}"
또는 DisplayMemberPath를 설정할 필요가 없습니다. PromptList에 있는 개체에 재정의 ToString()을 포함하면 됩니다.다음과 같이:
class Prompt {
public string Name = "";
public string Value = "";
public override string ToString() {
return Name;
}
}
ToString()이 자동으로 호출되고 클래스의 Name 매개 변수가 표시됩니다.ComboBox, ListBox 등에 사용할 수 있습니다.
시도:
<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" SelectedItem="{Binding Prompt}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
제가 아는 바로는
"DisplayMemberPath"는 반사를 사용하여 데이터 컨텍스트 클래스에서 속성 이름을 가져올 수 없으면 아무것도 표시되지 않습니다.
if 클래스
class some_class{
string xxx{ get; }
}
DisplayMemberPath=xxx. 값 "xxx"가 무엇인지 표시합니다.
데이터 컨텍스트에서 속성을 연결하려면 항목 템플릿을 만들어야 합니다. 이 템플릿은 머리글과 드롭다운 목록에 표시됩니다.
<ComboBox.ItemTemplate>
<DataTemplate DataType="employee">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding first_name}" />
<TextBlock Text="" />
<TextBlock Text="{Binding last_name}" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
"DisplayMemberPath" 및 "ComboBox"를 사용할 수 없습니다.항목 템플릿"이 동시에 설정됩니다.
언급URL : https://stackoverflow.com/questions/1460612/wpf-combobox-displaymemberpath
'source' 카테고리의 다른 글
WPF 데이터 그리드 선택 행 클릭 이벤트? (0) | 2023.05.01 |
---|---|
MongoDB: 끔찍한 맵성능 저하 (0) | 2023.05.01 |
IIS 7.5의 ASP.NET MVC - 오류 403.14 금지 (0) | 2023.05.01 |
Visual Studio Code에서 실행 중인 Angular 응용 프로그램에서 TSLint 확장자 쓰기 오류 발생 (0) | 2023.04.26 |
Windows GUI: WPF 또는 WinRT(2015+) (0) | 2023.04.26 |