combobox combobox - WPF組合框DisplayMemberPath





item binding (5)


你沒有綁定到類中的數據,你告訴它從成員“name”所指定的類成員獲取數據,所以如果你的實例有item.Name == "steve"它正試圖從item.steve獲取數據。

為此,您應該從MemberPath中刪除綁定。 將其更改為MemberPath = "Name"這告訴它從成員“Name”獲取數據。 這樣它會調用item.Name ,而不是item.steve

好吧,我看了其他問題,似乎沒有得到我的答案,所以希望在這裡有人可以。

非常簡單的問題為什麼DisplayMemberPath屬性不綁定到該項目?

<ComboBox Grid.Row="1" Grid.Column="2" ItemsSource="{Binding PromptList}" DisplayMemberPath="{Binding Name}" SelectedItem="{Binding Prompt}"/>

跟踪輸出顯示它試圖綁定到IEnumerable而不是IEnumerable中的實際項目。 我很困惑,一個簡單的方法來填充一個組合框,而不用在xaml中添加一行。

它只是在itemssource中為對象調用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>

但在我看來,這麼簡單的任務太多了。 我可以使用relativesource綁定嗎?




DisplayMemberPath指定每個項目的顯示字符串屬性的路徑。 在你的情況下,你將它設置為"Name" ,而不是"{Binding Name}"




您可以刪除DisplayMemberPath,然後在TextBlock中設置路徑。
當沒有ItemTemplate時,DisplayMemberPath是真正的。
或者您可以刪除您的ItemTemplate並使用DisplayMemberPath - 在這種情況下,它基本上為您創建一個TextBlock。 不建議你做兩個。

   <TextBlock text="{Binding Path=Name, Mode=OneWay}" 



您應該將MemberPath="{Binding Name}"更改為MemberPath="Name" 。 然後它會工作。




INotifyDataErrorInfo有許多改進(特別是,它支持每個對象/屬性的多個動​​態變化的錯誤消息),使其優於以前的接口。 但最大的區別在於它是異步的。 您現在必須在錯誤狀態更改時觸發ErrorsChanged事件。

如果要在.NET 4.5中實現針對運行Windows 8的設備的應用程序,則應該強烈考慮使用新接口。 異步式編程是此類應用程序的“預期模型”,尤其是在包含RT設備的情況下。 在IDataErrorInfo上實現INotifyDataErrorInfo並不是那麼複雜,所以沒有真正的缺點。

但這並不意味著您應該改進所有現有應用程序; 再次,這取決於你的目標。 如果您嘗試將現有應用程序升級為RT兼容,則應該交換新的錯誤處理代碼。 否則,無需改變有效的方法。





wpf combobox