Как привязать несколько значений флажков к одному текстовому полю с помощью методов MVVM WPF?
привет...
у меня есть 4 флажка и 1 текстовое поле...
когда я выбираю значение из флажка ... это значение должно быть привязано к текстовому полю...
Значит, когда я выбираю 2 флажка...содержимое каждого флажка должно быть привязано к текстовому полю..
я сделал это... но когда я выбираю флажок, получаю ошибку, говоря, что нулевая ссылка..
как решить эту проблему...
Что я уже пробовал:
В виду :
<Window x:Class="multichkboxsel.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:multichkboxsel" xmlns:viewmodel="clr-namespace:multichkboxsel.ViewModel" xmlns:converter="clr-namespace:multichkboxsel.converter" xmlns:view="clr-namespace:multichkboxsel.View" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <viewmodel:chkviewmdl x:Key="vm"></viewmodel:chkviewmdl> <converter:myconverter x:Key="cv"></converter:myconverter> </Window.Resources> <StackPanel Orientation="Vertical" Margin="20" DataContext="{Binding Source={StaticResource vm}}"> <CheckBox Width="120" Name="cbIndia" Content="India" Command="{Binding MyCommand}"> <CheckBox.CommandParameter> <MultiBinding Converter="{StaticResource cv}"> <Binding ElementName="cbIndia" Path="Content"/> <Binding ElementName="cbIndia" Path="IsChecked"/> </MultiBinding> </CheckBox.CommandParameter> </CheckBox> <CheckBox Width="120" Name="cbUS" Content="US" Command="{Binding MyCommand}"> <CheckBox.CommandParameter> <MultiBinding Converter="{StaticResource cv}"> <Binding ElementName="cbUS" Path="Content"/> <Binding ElementName="cbUS" Path="IsChecked"/> </MultiBinding> </CheckBox.CommandParameter> </CheckBox> <CheckBox Width="120" Name="cbUK" Content="UK" Command="{Binding MyCommand}"> <CheckBox.CommandParameter> <MultiBinding Converter="{StaticResource cv}"> <Binding ElementName="cbUK" Path="Content"/> <Binding ElementName="cbUK" Path="IsChecked"/> </MultiBinding> </CheckBox.CommandParameter> </CheckBox> <CheckBox Width="120" Name="cbChina" Content="China" Command="{Binding MyCommand}"> <CheckBox.CommandParameter> <MultiBinding Converter="{StaticResource cv}"> <Binding ElementName="cbChina" Path="Content"/> <Binding ElementName="cbChina" Path="IsChecked"/> </MultiBinding> </CheckBox.CommandParameter> </CheckBox> <TextBox Width="300" Margin="20" Text="{Binding Path=Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox> </StackPanel> </Window>
В модель представления:
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace multichkboxsel.ViewModel { class chkviewmdl : INotifyPropertyChanged { private ObservableCollection<string> _countries; public ObservableCollection<string> Countries { get { return _countries; ; } set { _countries = value; OnPropertyChange("Countries"); } } public ICommand MyCommand { get; set; } public chkviewmdl() { MyCommand = new RelayCommand(executemethod, canexecutemethod); } private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChange("Name"); } } public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChange(string propertyname) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyname)); } } private bool canexecutemethod(object parameter) { return true; } private void executemethod(object parameter) { //Name = (string)parameter; var values = (object[])parameter; string name = (string)values[0]; bool check = (bool)values[1]; if (check) { Countries.Add(name); } else { Countries.Remove(name); } Name = ""; foreach (string item in Countries) { Name = Name + item; } } } }
И Я ТОЖЕ ИСПОЛЬЗОВАЛ КЛАСС КОНВЕРТЕРА...
Graeme_Grant
Похоже, что ошибка находится в классе конвертера (код недоступен). Установите точку останова в классе преобразователя и пройдите через код...