If you merely want to indicate the changed textbox, I would use a multibinding on the visibility property of the textbox. This works:
<ListView Name="LV_Items">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="#">
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource NonEqualValuesToVisibilityConverter}">
<Binding Path="ComboDefaultValue" Mode="OneWay"></Binding>
<Binding ElementName="CB_Selection" Path="SelectedValue" Mode="OneWay"></Binding>
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
<ComboBox Name="CB_Selection"
ItemsSource="{Binding ComboItems}"
DisplayMemberPath="Item2"
SelectedValue="{Binding ComboDefaultValue, Mode=OneTime}"
SelectedValuePath="Item1">
</ComboBox>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
code for the multivalue converter:
public class NonEqualValuesToVisibilityConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values == null || values.Length != 2)
{
return Visibility.Hidden;
}
return values[0].Equals(values[1]) ? Visibility.Hidden : Visibility.Visible;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
The listview is bound to collection of items like so:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var items = new List<MyListViewItemData>();
items.Add(new MyListViewItemData()
{
ComboDefaultValue = 1,
ComboItems = new List<Tuple<int, string>>(){ new Tuple<int, string>(1, "m/s"), new Tuple<int, string>(2, "km/h") }
});
items.Add(new MyListViewItemData()
{
ComboDefaultValue = 10,
ComboItems = new List<Tuple<int, string>>() { new Tuple<int, string>(10, "seconds"), new Tuple<int, string>(20, "minutes") }
});
LV_Items.ItemsSource = items;
}
}
public class MyListViewItemData
{
public List<Tuple<int, String>> ComboItems { get; set; }
public int ComboDefaultValue { get; set; }
}
I chose an arbitrary class MyListViewItemData to store all possible values and the default value.