Multibinding
tarafından çağrılan Converter
değerler dizisi uygun değere dolu amaDependencyProperty.UnsetValue
bir değere sahip olmadığı için benim kod başlangıçta başarısız olur. i hatayıWPF MultiBinding başarısız ==> DependencyProperty.UnsetValue
public class ButtonColorConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
string val1 = string.Format(" {0} ", values[0]);
string val2 = (string)values[1]; **//Here i am getting ==> {DependencyProperty.UnsetValue}**
return val1.Equals(val2)
? Brushes.NavajoWhite
: Brushes.White;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
alma nerede
Sen full code indirmek ya da benim kodları aşağıda başına pasajı görebilirsiniz Converter bir göz ve ayrıca bkz.MainWindow.xaml
<Window x:Class="DataPager.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"
xmlns:Local="clr-namespace:DataPager.Convertor_For_BackGround">
<Grid>
<Grid.Resources>
<Local:ButtonColorConverter x:Key="currentPageSetter"/>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="36*" />
<RowDefinition Height="275*" />
</Grid.RowDefinitions>
<ItemsControl Name="pageControl" ItemsSource="{Binding Path=PageCollection}" Grid.Row="0">
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Border >
<StackPanel>
<ItemsPresenter></ItemsPresenter>
</StackPanel>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel x:Uid="pageItemTemplate">
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button x:Name="pageNumberButton" Margin="3,4" Content="{Binding Path=Page_Number}">
<Button.Background>
<MultiBinding Converter="{StaticResource currentPageSetter}">
<Binding Path="Page_Number" />
<Binding Path="CurrentPage.Page_Number" /> **//This Binding not resolves properly**
</MultiBinding>
</Button.Background>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBox Text="{Binding Path=CurrentPage.Page_Number,Mode=TwoWay, FallbackValue=asdf}" Grid.Row="1" Height="23" Margin="79,62,257,0" Name="textBox1" VerticalAlignment="Top" Width="167" />
</Grid>
</Window>
MainWindow.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
MyPageViewModel = new PageViewModel();
MyPageViewModel.PageCollection.Add(new PageNumberViewModel(string.Format(" {0} ",0)));
MyPageViewModel.PageCollection.Add(new PageNumberViewModel(string.Format(" {0} ",1)));
MyPageViewModel.PageCollection.Add(new PageNumberViewModel(string.Format(" {0} ",2)));
MyPageViewModel.PageCollection.Add(new PageNumberViewModel(string.Format(" {0} ",3)));
InitializeComponent();
}
public PageViewModel MyPageViewModel
{
get
{
return this.DataContext as PageViewModel;
}
set
{
this.DataContext = value;
}
}
}
Ve bu ViewModel Sınıflar olduğunu.
PageViewModel.cs
public class PageViewModel:ViewModelBase
{
private ObservableCollection<PageNumberViewModel> m_pageCollection = new ObservableCollection<PageNumberViewModel>();
private PageNumberViewModel m_currentPage = new PageNumberViewModel(string.Format(" {0} ",0));
public PageViewModel()
{
m_currentPage = new PageNumberViewModel(string.Format(" {0} ", 1000));
}
public PageNumberViewModel CurrentPage
{
get
{
return this.m_currentPage;
}
set
{
if (m_currentPage == value)
return;
this.m_currentPage = value;
base.OnPropertyChanged("CurrentPage");
}
}
public ObservableCollection<PageNumberViewModel> PageCollection
{
get
{
return this.m_pageCollection;
}
set
{
if (m_pageCollection == value)
return;
this.m_pageCollection = value;
base.OnPropertyChanged("PageCollection");
}
}
}
PageNumberViewModel.cs Yolu CurrentPage.Page_Number
çözmek için doğru DataContext'i yok ediyor gibi
public class PageNumberViewModel : ViewModelBase
{
private string m_pageNumber;
public PageNumberViewModel()
{
}
public PageNumberViewModel(string pageNumgerArg)
{
this.m_pageNumber = pageNumgerArg;
}
public string Page_Number
{
get { return m_pageNumber; }
set
{
if (m_pageNumber == value)
return;
m_pageNumber = value;
OnPropertyChanged("PageNumber");
}
}
}
Hatta koduna derin bakmadan sen yürütmek (string) değerleri [1] (her zaman "sihirli numaralar" dikkat öncesinde, şiddetle ilk teste öneririm) a) değerleri []! = null ve b) gerçekten dizin 1'de bir nesne (veya en azından değerler.Length> 0) içeriyorsa ve c) bu nesne istenen STRING türüne gerçekten sahipse. Tetikleyiciler sık sık ateşleyebilir ve beklediğinizden farklı değerler içerebilir, bu yüzden bunları doğrudan kullanmadan önce Dizilerinizi kontrol edin. Bu, istisnalarınızı engellemenize yardımcı olabilir. –