У меня есть большинство объектов кнопки TextBlock и радио в моем приложении, связанные с моей dictionnaryсловарь Failure связывания в WPF
хранить новое значение в словаре.
Проблема в том, что отказ привязки вызывает исключение, которое происходит очень медленно.
Вот пример: (. Этот код работает правильно, это просто медленно, если он не может найти матч в стартовом приложение)
<StackPanel>
<TextBox Text="{Binding Dictio[0], Mode=TwoWay}"/>
<TextBox Text="{Binding Dictio[1], Mode=TwoWay}"/>
<RadioButton GroupName="select" IsChecked="{Binding Dictio[2], Mode=TwoWay}" Content="true"/>
</stackPanel>
И в моем классе
private Dictionary<int, object> _Dictio;
public MainWindow()
{
Dictio = new Dictionary<int, object>();
this.DataContext = this;
InitializeComponent();
}
public Dictionary<int, object> Dictio
{
get { return _Dictio; }
set { _Dictio = value; }
}
private void test(object sender, RoutedEventArgs e)
{
foreach (KeyValuePair<int, object> kvp in Dictio)
{
Console.Out.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
}
}
Когда я пытаюсь запустить приложение и вяжущие пытается для поиска Dictio [ключ], я получаю это в моем окне вывода для все ключа моего dictionnary Dictio:
System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'Object') from 'Dictio' (type 'Dictionary`2'). BindingExpression:Path=Dictio[4]; DataItem='MainWindow' (Name=''); target element is 'RadioButton' (Name='mm'); target property is 'IsChecked' (type 'Nullable`1') TargetInvocationException:'System.Reflection.TargetInvocationException: Une exception a été levée par la cible d'un appel. ---> System.Collections.Generic.KeyNotFoundException: La clé donnée était absente du dictionnaire.
à System.Collections.Generic.Dictionary`2.get_Item(TKey key)
--- Fin de la trace de la pile d'exception interne ---
à System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
à System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
à System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
à System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
à MS.Internal.Data.PropertyPathWorker.GetValue(Object item, Int32 level)
à MS.Internal.Data.PropertyPathWorker.RawValue(Int32 k)'
Есть ли способ, чтобы соединение не выдавало исключение, если словарь пуст
Вы можете связать с помощью преобразователя, который будет проверять размер словаря перед тем возвращающ значение –
вы можете объяснить больше о конвертере, как я могу разработать, если у вас есть пример – user3222970