मेरे पास एक कॉम्बोबॉक्स है जिसका गुण आइटमसोर्स और चयनित वैल्यू एक मॉडल से बंधे हैं। कभी-कभी, मॉडल को चयनित आइटम को एक अलग करने के लिए समायोजित करने की आवश्यकता होती है, लेकिन जब मैं इसे मॉडल में करता हूं, तो मॉडल मान दृश्य में दिखाई नहीं दे रहा है, भले ही चयनित वैल्यू ठीक तरह से सेट हो (स्नूप के साथ और चयन में दोनों को चेक किया गया हो आयोजन प्रबंधकर्ता)।डब्ल्यूपीएफ कॉम्बोबॉक्स उचित रूप से बाध्य मूल्य को क्यों प्रतिबिंबित नहीं करता है?
<Window x:Class="WpfApplication1.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" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<ComboBox Height="25" Width="120" SelectedValue="{Binding SelectedValue}" SelectedValuePath="Key" ItemsSource="{Binding PossibleValues}" DisplayMemberPath="Value"/>
</Grid>
</Window>
यहाँ और मॉडल है:
समस्या समझने के लिए, यहाँ एक सरल XAML है
using System.Collections.Generic;
using System.Windows;
using System.ComponentModel;
namespace WpfApplication1
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
int m_selectedValue = 2;
Dictionary<int, string> m_possibleValues = new Dictionary<int, string>() { { 1, "one" }, { 2, "two" }, { 3, "three" }, {4,"four"} };
public int SelectedValue
{
get { return m_selectedValue; }
set
{
if (value == 3)
{
m_selectedValue = 1;
}
else
{
m_selectedValue = value;
}
PropertyChanged(this, new PropertyChangedEventArgs("SelectedValue"));
}
}
public Dictionary<int, string> PossibleValues
{
get { return m_possibleValues; }
set { m_possibleValues = value; }
}
public MainWindow()
{
InitializeComponent();
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
मैं उम्मीद व्यवहार इस प्रकार हो:
- प्रारंभ में, दो को चुना गया है
- "एक" चुनें -> कॉम्बोबॉक्स डिस्प्ला वाईएस "एक"
- का चयन करें "दो" -> ComboBox प्रदर्शित करता है "दो"
- चुनें "तीन" -> ComboBox प्रदर्शित करता है "एक"
- का चयन करें "चार" -> ComboBox प्रदर्शित करता है "चार"
हालांकि, # 4 में, "तीन" प्रदर्शित होता है। क्यूं कर? मॉडल में मान 1 ("एक") में बदल दिया गया था, लेकिन दृश्य अभी भी 3 ("तीन") प्रदर्शित करता है।
मुझे चयन चयन किए गए ईवेंट हैंडलर में बाध्यकारी लक्ष्य को स्पष्ट रूप से अपडेट करके एक समाधान मिला है, लेकिन यह गलत लगता है। क्या यह हासिल करने का कोई और तरीका है?
क्या कॉम्बोबॉक्स मॉडल की वर्तमान स्थिति प्रदर्शित नहीं करना चाहिए? यह सहज नहीं हो सकता है, लेकिन प्रदर्शित करने के लिए यह सही बात है। यह वास्तव में एक सरलीकृत उदाहरण है। वास्तविक उपयोग केस थोड़ा अधिक जटिल है, लेकिन यह एक ही मुद्दे पर उबलता है – Rado
क्या आपने चयनित वैल्यू को स्पष्ट रूप से दो-तरफा बनाने का प्रयास किया है? {बाध्यकारी पथ = चयनित वैल्यू, मोड = दोवे} –
@ जैकोबप्रॉफिट मोड डिफ़ॉल्ट रूप से दोवे है, लेकिन मैंने इसे स्पष्ट रूप से सेट करने की कोशिश की और समस्या बनी रहती है। – Rado